diff --git a/404.html b/404.html index 63d6acdb..4c0b14a7 100644 --- a/404.html +++ b/404.html @@ -4,7 +4,7 @@ OpenRAG - + diff --git a/agents/index.html b/agents/index.html index 151995ad..4afeb758 100644 --- a/agents/index.html +++ b/agents/index.html @@ -4,7 +4,7 @@ Use Langflow in OpenRAG | OpenRAG - + diff --git a/assets/js/0ba6a408.efa6fc46.js b/assets/js/0ba6a408.e346183d.js similarity index 84% rename from assets/js/0ba6a408.efa6fc46.js rename to assets/js/0ba6a408.e346183d.js index 1a21b262..c9019337 100644 --- a/assets/js/0ba6a408.efa6fc46.js +++ b/assets/js/0ba6a408.e346183d.js @@ -1 +1 @@ -"use strict";(globalThis.webpackChunkopenrag_docs=globalThis.webpackChunkopenrag_docs||[]).push([[571],{3227:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>c,contentTitle:()=>l,default:()=>p,frontMatter:()=>d,metadata:()=>t,toc:()=>h});const t=JSON.parse('{"id":"core-components/knowledge","title":"Configure knowledge","description":"OpenRAG includes a built-in OpenSearch instance that serves as the underlying datastore for your knowledge (documents).","source":"@site/docs/core-components/knowledge.mdx","sourceDirName":"core-components","slug":"/knowledge","permalink":"/knowledge","draft":false,"unlisted":false,"editUrl":"https://github.com/openrag/openrag/tree/main/docs/docs/core-components/knowledge.mdx","tags":[],"version":"current","frontMatter":{"title":"Configure knowledge","slug":"/knowledge"},"sidebar":"tutorialSidebar","previous":{"title":"Flows","permalink":"/agents"},"next":{"title":"Ingest knowledge","permalink":"/ingestion"}}');var i=s(4848),o=s(8453),r=s(9179),a=s(7637);const d={title:"Configure knowledge",slug:"/knowledge"},l=void 0,c={},h=[{value:"Browse knowledge",id:"browse-knowledge",level:2},{value:"Default documents",id:"default-documents",level:3},{value:"OpenSearch authentication and document access",id:"auth",level:2},...a.RM,{value:"OpenSearch indexes",id:"opensearch-indexes",level:2},{value:"Knowledge ingestion settings",id:"knowledge-ingestion-settings",level:2},{value:"Set the embedding model and dimensions",id:"set-the-embedding-model-and-dimensions",level:3},{value:"Set Docling parameters",id:"set-docling-parameters",level:3},{value:"Set the local documents path",id:"set-the-local-documents-path",level:3},{value:"Delete knowledge",id:"delete-knowledge",level:2},{value:"See also",id:"see-also",level:2}];function u(e){const n={a:"a",admonition:"admonition",code:"code",em:"em",h2:"h2",h3:"h3",li:"li",p:"p",strong:"strong",ul:"ul",...(0,o.R)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsxs)(n.p,{children:["OpenRAG includes a built-in ",(0,i.jsx)(n.a,{href:"https://docs.opensearch.org/latest/",children:"OpenSearch"})," instance that serves as the underlying datastore for your ",(0,i.jsx)(n.em,{children:"knowledge"})," (documents).\nThis specialized database is used to store and retrieve your documents and the associated vector data (embeddings)."]}),"\n",(0,i.jsxs)(n.p,{children:["The documents in your OpenSearch knowledge base provide specialized context in addition to the general knowledge available to the language model that you select when you ",(0,i.jsx)(n.a,{href:"/install-options",children:"install OpenRAG"})," or ",(0,i.jsx)(n.a,{href:"/agents",children:"edit a flow"}),"."]}),"\n",(0,i.jsxs)(n.p,{children:["You can ",(0,i.jsx)(n.a,{href:"/ingestion",children:"upload documents"})," from a variety of sources to populate your knowledge base with unique content, such as your own company documents, research papers, or websites.\nDocuments are processed through OpenRAG's knowledge ingestion flows with Docling."]}),"\n",(0,i.jsxs)(n.p,{children:["Then, the ",(0,i.jsxs)(n.a,{href:"/chat",children:["OpenRAG ",(0,i.jsx)(n.strong,{children:"Chat"})]})," can run ",(0,i.jsx)(n.a,{href:"https://www.ibm.com/think/topics/vector-search",children:"similarity searches"})," against your OpenSearch database to retrieve relevant information and generate context-aware responses."]}),"\n",(0,i.jsxs)(n.p,{children:["You can configure how documents are ingested and how the ",(0,i.jsx)(n.strong,{children:"Chat"})," interacts with your knowledge base."]}),"\n",(0,i.jsx)(n.h2,{id:"browse-knowledge",children:"Browse knowledge"}),"\n",(0,i.jsxs)(n.p,{children:["The ",(0,i.jsx)(n.strong,{children:"Knowledge"})," page lists the documents OpenRAG has ingested into your OpenSearch database, specifically in an ",(0,i.jsx)(n.a,{href:"https://docs.opensearch.org/latest/getting-started/intro/#index",children:"OpenSearch index"})," named ",(0,i.jsx)(n.code,{children:"documents"}),"."]}),"\n",(0,i.jsxs)(n.p,{children:["To explore the raw contents of your knowledge base, click ",(0,i.jsx)(r.A,{name:"Library","aria-hidden":"true"})," ",(0,i.jsx)(n.strong,{children:"Knowledge"})," to get a list of all ingested documents.\nClick a document to view the chunks produced from splitting the document during ingestion."]}),"\n",(0,i.jsx)(n.h3,{id:"default-documents",children:"Default documents"}),"\n",(0,i.jsxs)(n.p,{children:["By default, OpenRAG includes some initial documents about OpenRAG.\nThese documents are ingested automatically during the ",(0,i.jsx)(n.a,{href:"/install#application-onboarding",children:"application onboarding process"}),"."]}),"\n",(0,i.jsxs)(n.p,{children:["You can use these documents to ask OpenRAG about itself, and to test the ",(0,i.jsx)(n.a,{href:"/chat",children:(0,i.jsx)(n.strong,{children:"Chat"})})," feature before uploading your own documents."]}),"\n",(0,i.jsxs)(n.p,{children:["If you ",(0,i.jsx)(n.a,{href:"#delete-knowledge",children:"delete"})," these documents, you won't be able to ask OpenRAG about itself and it's own functionality.\nIt is recommended that you keep these documents, and use ",(0,i.jsx)(n.a,{href:"/knowledge-filters",children:"filters"})," to separate them from your other knowledge."]}),"\n",(0,i.jsx)(n.h2,{id:"auth",children:"OpenSearch authentication and document access"}),"\n",(0,i.jsxs)(n.p,{children:["When you ",(0,i.jsx)(n.a,{href:"/install-options",children:"install OpenRAG"}),", you provide the initial configuration values for your OpenRAG services, including authentication credentials for OpenSearch and OAuth connectors.\nThis configuration determines how OpenRAG authenticates with your deployment's OpenSearch instance, and it controls user access to documents in your knowledge base:"]}),"\n",(0,i.jsx)(a.Ay,{}),"\n",(0,i.jsx)(n.h2,{id:"opensearch-indexes",children:"OpenSearch indexes"}),"\n",(0,i.jsxs)(n.p,{children:["An ",(0,i.jsx)(n.a,{href:"https://docs.opensearch.org/latest/getting-started/intro/#index",children:"OpenSearch index"})," is a collection of documents in an OpenSearch database."]}),"\n",(0,i.jsxs)(n.p,{children:["By default, all documents you upload to your OpenRAG knowledge base are stored in an index named ",(0,i.jsx)(n.code,{children:"documents"}),"."]}),"\n",(0,i.jsxs)(n.p,{children:["It is possible to change the index name by ",(0,i.jsx)(n.a,{href:"/agents#inspect-and-modify-flows",children:"editing the ingestion flow"}),".\nHowever, this can impact dependent processes, such as the ",(0,i.jsx)(n.a,{href:"/knowledge-filters",children:"filters"})," and ",(0,i.jsx)(n.a,{href:"/chat",children:(0,i.jsx)(n.strong,{children:"Chat"})})," flow, that reference the ",(0,i.jsx)(n.code,{children:"documents"})," index by default.\nMake sure you edit other flows as needed to ensure all processes use the same index name."]}),"\n",(0,i.jsxs)(n.p,{children:["If you encounter errors or unexpected behavior after changing the index name, you can ",(0,i.jsx)(n.a,{href:"/agents#revert-a-built-in-flow-to-its-original-configuration",children:"revert the flows to their original configuration"}),", or ",(0,i.jsx)(n.a,{href:"/knowledge#delete-knowledge",children:"delete knowledge"})," to clear the existing documents from your knowledge base."]}),"\n",(0,i.jsx)(n.h2,{id:"knowledge-ingestion-settings",children:"Knowledge ingestion settings"}),"\n",(0,i.jsx)(n.admonition,{type:"warning",children:(0,i.jsx)(n.p,{children:"Knowledge ingestion settings apply to documents you upload after making the changes.\nDocuments uploaded before changing these settings aren't reprocessed."})}),"\n",(0,i.jsx)(n.p,{children:"After changing knowledge ingestion settings, you must determine if you need to reupload any documents to be consistent with the new settings."}),"\n",(0,i.jsx)(n.p,{children:"It isn't always necessary to reupload documents after changing knowledge ingestion settings.\nFor example, it is typical to upload some documents with OCR enabled and others without OCR enabled."}),"\n",(0,i.jsxs)(n.p,{children:["If needed, you can use ",(0,i.jsx)(n.a,{href:"/knowledge-filters",children:"filters"})," to separate documents that you uploaded with different settings, such as different embedding models."]}),"\n",(0,i.jsx)(n.h3,{id:"set-the-embedding-model-and-dimensions",children:"Set the embedding model and dimensions"}),"\n",(0,i.jsxs)(n.p,{children:["When you ",(0,i.jsx)(n.a,{href:"/install-options",children:"install OpenRAG"}),", you select at least one embedding model during the ",(0,i.jsx)(n.a,{href:"/install#application-onboarding",children:"application onboarding process"}),".\nOpenRAG automatically detects and configures the appropriate vector dimensions for your selected embedding model, ensuring optimal search performance and compatibility."]}),"\n",(0,i.jsxs)(n.p,{children:["In the OpenRAG repository, you can find the complete list of supported models in ",(0,i.jsx)(n.a,{href:"https://github.com/langflow-ai/openrag/blob/main/src/services/models_service.py",children:(0,i.jsx)(n.code,{children:"models_service.py"})})," and the corresponding vector dimensions in ",(0,i.jsx)(n.a,{href:"https://github.com/langflow-ai/openrag/blob/main/src/config/settings.py",children:(0,i.jsx)(n.code,{children:"settings.py"})}),"."]}),"\n",(0,i.jsxs)(n.p,{children:["During the application onboarding process, you can select from the supported models.\nThe default embedding dimension is ",(0,i.jsx)(n.code,{children:"1536"}),", and the default model is the OpenAI ",(0,i.jsx)(n.code,{children:"text-embedding-3-small"}),"."]}),"\n",(0,i.jsxs)(n.p,{children:["If you want to use an unsupported model, you must manually set the model in your ",(0,i.jsxs)(n.a,{href:"/reference/configuration",children:["OpenRAG ",(0,i.jsx)(n.code,{children:".env"})," file"]}),".\nIf you use an unsupported embedding model that doesn't have defined dimensions in ",(0,i.jsx)(n.code,{children:"settings.py"}),", then OpenRAG falls back to the default dimensions (1536) and logs a warning. OpenRAG's OpenSearch instance and flows continue to work, but ",(0,i.jsx)(n.a,{href:"https://www.ibm.com/think/topics/vector-search",children:"similarity search"})," quality can be affected if the actual model dimensions aren't 1536."]}),"\n",(0,i.jsxs)(n.p,{children:["To change the embedding model after onboarding, it is recommended that you modify the embedding model setting in the OpenRAG ",(0,i.jsx)(n.strong,{children:"Settings"})," page or in your ",(0,i.jsxs)(n.a,{href:"/reference/configuration",children:["OpenRAG ",(0,i.jsx)(n.code,{children:".env"})," file"]}),".\nThis will automatically update all relevant ",(0,i.jsx)(n.a,{href:"/agents",children:"OpenRAG flows"})," to use the new embedding model configuration."]}),"\n",(0,i.jsx)(n.h3,{id:"set-docling-parameters",children:"Set Docling parameters"}),"\n",(0,i.jsxs)(n.p,{children:["OpenRAG uses ",(0,i.jsx)(n.a,{href:"https://docling-project.github.io/docling/",children:"Docling"})," for document ingestion because it supports many file formats, processes tables and images well, and performs efficiently."]}),"\n",(0,i.jsxs)(n.p,{children:["When you ",(0,i.jsx)(n.a,{href:"/ingestion",children:"upload documents"}),", Docling processes the files, splits them into chunks, and stores them as separate, structured documents in your OpenSearch knowledge base."]}),"\n",(0,i.jsx)(n.p,{children:"You can use either Docling Serve or OpenRAG's built-in Docling ingestion pipeline to process documents."}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.strong,{children:"Docling Serve ingestion"}),": By default, OpenRAG uses ",(0,i.jsx)(n.a,{href:"https://github.com/docling-project/docling-serve",children:"Docling Serve"}),".\nThis means that OpenRAG starts a ",(0,i.jsx)(n.code,{children:"docling serve"})," process on your local machine and runs Docling ingestion through an API service."]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.strong,{children:"Built-in Docling ingestion"}),": If you want to use OpenRAG's built-in Docling ingestion pipeline instead of the separate Docling Serve service, set ",(0,i.jsx)(n.code,{children:"DISABLE_INGEST_WITH_LANGFLOW=true"})," in your ",(0,i.jsx)(n.a,{href:"/reference/configuration#document-processing-settings",children:"OpenRAG environment variables"}),"."]}),"\n",(0,i.jsx)(n.p,{children:"The built-in pipeline uses the Docling processor directly instead of through the Docling Serve API."}),"\n",(0,i.jsxs)(n.p,{children:["For the underlying functionality, see ",(0,i.jsx)(n.a,{href:"https://github.com/langflow-ai/openrag/blob/main/src/models/processors.py#L58",children:(0,i.jsx)(n.code,{children:"processors.py"})})," in the OpenRAG repository."]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(n.p,{children:["To modify the Docling ingestion and embedding parameters, click ",(0,i.jsx)(r.A,{name:"Settings2","aria-hidden":"true"})," ",(0,i.jsx)(n.strong,{children:"Settings"})," in the OpenRAG user interface."]}),"\n",(0,i.jsx)(n.admonition,{type:"tip",children:(0,i.jsxs)(n.p,{children:["OpenRAG warns you if ",(0,i.jsx)(n.code,{children:"docling serve"})," isn't running.\nFor information about starting and stopping OpenRAG native services, like Docling, see ",(0,i.jsx)(n.a,{href:"/manage-services",children:"Manage OpenRAG services"}),"."]})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.strong,{children:"Embedding model"}),": Select the model to use to generate vector embeddings for your documents."]}),"\n",(0,i.jsxs)(n.p,{children:["This is initially set during installation.\nThe recommended way to change this setting is in the OpenRAG ",(0,i.jsx)(n.strong,{children:"Settings"})," or your ",(0,i.jsxs)(n.a,{href:"/reference/configuration",children:["OpenRAG ",(0,i.jsx)(n.code,{children:".env"})," file"]}),".\nThis will automatically update all relevant ",(0,i.jsx)(n.a,{href:"/agents",children:"OpenRAG flows"})," to use the new embedding model configuration."]}),"\n",(0,i.jsxs)(n.p,{children:["If you uploaded documents prior to changing the embedding model, you can ",(0,i.jsx)(n.a,{href:"/knowledge-filters",children:"create filters"})," to separate documents embedded with different models, or you can reupload all documents to regenerate embeddings with the new model.\nIf you want to use multiple embeddings models, similarity search (in the ",(0,i.jsx)(n.strong,{children:"Chat"}),") can take longer as it searching each model's embeddings separately."]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.strong,{children:"Chunk size"}),": Set the number of characters for each text chunk when breaking down a file.\nLarger chunks yield more context per chunk, but can include irrelevant information. Smaller chunks yield more precise semantic search, but can lack context.\nThe default value is 1000 characters, which is usually a good balance between context and precision."]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.strong,{children:"Chunk overlap"}),": Set the number of characters to overlap over chunk boundaries.\nUse larger overlap values for documents where context is most important. Use smaller overlap values for simpler documents or when optimization is most important.\nThe default value is 200 characters, which represents an overlap of 20 percent if the ",(0,i.jsx)(n.strong,{children:"Chunk size"})," is 1000. This is suitable for general use. For faster processing, decrease the overlap to approximately 10 percent. For more complex documents where you need to preserve context across chunks, increase it to approximately 40 percent."]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.strong,{children:"Table Structure"}),": Enables Docling's ",(0,i.jsx)(n.a,{href:"https://docling-project.github.io/docling/reference/document_converter/",children:(0,i.jsx)(n.code,{children:"DocumentConverter"})})," tool for parsing tables. Instead of treating tables as plain text, tables are output as structured table data with preserved relationships and metadata. This option is enabled by default."]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.strong,{children:"OCR"}),": Enables Optical Character Recognition (OCR) processing when extracting text from images and ingesting scanned documents. This setting is best suited for processing text-based documents faster with Docling's ",(0,i.jsx)(n.a,{href:"https://docling-project.github.io/docling/reference/document_converter/",children:(0,i.jsx)(n.code,{children:"DocumentConverter"})}),". Images are ignored and not processed."]}),"\n",(0,i.jsx)(n.p,{children:"This option is disabled by default. Enabling OCR can slow ingestion performance."}),"\n",(0,i.jsxs)(n.p,{children:["If OpenRAG detects that the local machine is running on macOS, OpenRAG uses the ",(0,i.jsx)(n.a,{href:"https://www.piwheels.org/project/ocrmac/",children:"ocrmac"})," OCR engine. Other platforms use ",(0,i.jsx)(n.a,{href:"https://www.jaided.ai/easyocr/",children:"easyocr"}),"."]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.strong,{children:"Picture descriptions"}),": Only applicable if ",(0,i.jsx)(n.strong,{children:"OCR"})," is enabled. Adds image descriptions generated by the ",(0,i.jsx)(n.a,{href:"https://huggingface.co/HuggingFaceTB/SmolVLM-Instruct",children:(0,i.jsx)(n.code,{children:"SmolVLM-256M-Instruct"})})," model. Enabling picture descriptions can slow ingestion performance."]}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(n.h3,{id:"set-the-local-documents-path",children:"Set the local documents path"}),"\n",(0,i.jsxs)(n.p,{children:["The default path for local uploads is ",(0,i.jsx)(n.code,{children:"~/.openrag/documents"}),". This is mounted to the ",(0,i.jsx)(n.code,{children:"/app/openrag-documents/"})," directory inside the OpenRAG container. Files added to the host or container directory are visible in both locations."]}),"\n",(0,i.jsxs)(n.p,{children:["To change this location, modify the ",(0,i.jsx)(n.strong,{children:"Documents Paths"})," variable in either the ",(0,i.jsxs)(n.a,{href:"/install#setup",children:[(0,i.jsx)(n.strong,{children:"Advanced Setup"})," menu"]})," or in your ",(0,i.jsxs)(n.a,{href:"/reference/configuration",children:["OpenRAG ",(0,i.jsx)(n.code,{children:".env"})," file"]}),"."]}),"\n",(0,i.jsx)(n.h2,{id:"delete-knowledge",children:"Delete knowledge"}),"\n",(0,i.jsx)(n.admonition,{type:"warning",children:(0,i.jsx)(n.p,{children:"This is a destructive operation that cannot be undone."})}),"\n",(0,i.jsxs)(n.p,{children:["To clear your entire knowledge base, ",(0,i.jsx)(n.a,{href:"/manage-services#reset-containers",children:"reset your OpenRAG containers"})," or ",(0,i.jsx)(n.a,{href:"/reinstall",children:"reinstall OpenRAG"}),"."]}),"\n",(0,i.jsx)(n.h2,{id:"see-also",children:"See also"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.a,{href:"/ingestion",children:"Ingest knowledge"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.a,{href:"/knowledge-filters",children:"Filter knowledge"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.a,{href:"/chat",children:"Chat with knowledge"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.a,{href:"/agents#inspect-and-modify-flows",children:"Inspect and modify flows"})}),"\n"]})]})}function p(e={}){const{wrapper:n}={...(0,o.R)(),...e.components};return n?(0,i.jsx)(n,{...e,children:(0,i.jsx)(u,{...e})}):u(e)}},7637:(e,n,s)=>{s.d(n,{Ay:()=>a,RM:()=>o});var t=s(4848),i=s(8453);const o=[];function r(e){const n={a:"a",code:"code",li:"li",p:"p",strong:"strong",ul:"ul",...(0,i.R)(),...e.components};return(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.strong,{children:"No-auth mode"}),": If you select ",(0,t.jsx)(n.strong,{children:"Basic Setup"})," in the ",(0,t.jsx)(n.a,{href:"/tui",children:"TUI"}),", or your ",(0,t.jsxs)(n.a,{href:"/reference/configuration",children:["OpenRAG ",(0,t.jsx)(n.code,{children:".env"})," file"]})," doesn't include OAuth credentials, then the OpenRAG OpenSearch instance runs in no-auth mode."]}),"\n",(0,t.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,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.strong,{children:"OAuth mode"}),": If you select ",(0,t.jsx)(n.strong,{children:"Advanced Setup"})," in the ",(0,t.jsx)(n.a,{href:"/tui",children:"TUI"}),", or your ",(0,t.jsxs)(n.a,{href:"/reference/configuration",children:["OpenRAG ",(0,t.jsx)(n.code,{children:".env"})," file"]})," includes OAuth credentials, then the OpenRAG OpenSearch instance runs in OAuth mode."]}),"\n",(0,t.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,t.jsxs)(n.p,{children:["To enable OAuth mode after initial setup, see ",(0,t.jsx)(n.a,{href:"/ingestion#oauth-ingestion",children:"Ingest files with OAuth connectors"}),"."]}),"\n"]}),"\n"]})}function a(e={}){const{wrapper:n}={...(0,i.R)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(r,{...e})}):r(e)}},9179:(e,n,s)=>{s.d(n,{A:()=>o});s(6540);var t=s(7856),i=s(4848);function o({name:e,...n}){const s=t[e];return s?(0,i.jsx)(s,{...n}):null}}}]); \ No newline at end of file +"use strict";(globalThis.webpackChunkopenrag_docs=globalThis.webpackChunkopenrag_docs||[]).push([[571],{3227:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>c,contentTitle:()=>l,default:()=>p,frontMatter:()=>d,metadata:()=>t,toc:()=>h});const t=JSON.parse('{"id":"core-components/knowledge","title":"Configure knowledge","description":"OpenRAG includes a built-in OpenSearch instance that serves as the underlying datastore for your knowledge (documents).","source":"@site/docs/core-components/knowledge.mdx","sourceDirName":"core-components","slug":"/knowledge","permalink":"/knowledge","draft":false,"unlisted":false,"editUrl":"https://github.com/openrag/openrag/tree/main/docs/docs/core-components/knowledge.mdx","tags":[],"version":"current","frontMatter":{"title":"Configure knowledge","slug":"/knowledge"},"sidebar":"tutorialSidebar","previous":{"title":"Flows","permalink":"/agents"},"next":{"title":"Ingest knowledge","permalink":"/ingestion"}}');var i=s(4848),o=s(8453),r=s(9179),a=s(7637);const d={title:"Configure knowledge",slug:"/knowledge"},l=void 0,c={},h=[{value:"Browse knowledge",id:"browse-knowledge",level:2},{value:"Default documents",id:"default-documents",level:3},{value:"OpenSearch authentication and document access",id:"auth",level:2},...a.RM,{value:"OpenSearch indexes",id:"opensearch-indexes",level:2},{value:"Knowledge ingestion settings",id:"knowledge-ingestion-settings",level:2},{value:"Set the embedding model and dimensions",id:"set-the-embedding-model-and-dimensions",level:3},{value:"Set Docling parameters",id:"set-docling-parameters",level:3},{value:"Set the local documents path",id:"set-the-local-documents-path",level:3},{value:"Delete knowledge",id:"delete-knowledge",level:2},{value:"See also",id:"see-also",level:2}];function u(e){const n={a:"a",admonition:"admonition",code:"code",em:"em",h2:"h2",h3:"h3",li:"li",p:"p",strong:"strong",ul:"ul",...(0,o.R)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsxs)(n.p,{children:["OpenRAG includes a built-in ",(0,i.jsx)(n.a,{href:"https://docs.opensearch.org/latest/",children:"OpenSearch"})," instance that serves as the underlying datastore for your ",(0,i.jsx)(n.em,{children:"knowledge"})," (documents).\nThis specialized database is used to store and retrieve your documents and the associated vector data (embeddings)."]}),"\n",(0,i.jsxs)(n.p,{children:["The documents in your OpenSearch knowledge base provide specialized context in addition to the general knowledge available to the language model that you select when you ",(0,i.jsx)(n.a,{href:"/install-options",children:"install OpenRAG"})," or ",(0,i.jsx)(n.a,{href:"/agents",children:"edit a flow"}),"."]}),"\n",(0,i.jsxs)(n.p,{children:["You can ",(0,i.jsx)(n.a,{href:"/ingestion",children:"upload documents"})," from a variety of sources to populate your knowledge base with unique content, such as your own company documents, research papers, or websites.\nDocuments are processed through OpenRAG's knowledge ingestion flows with Docling."]}),"\n",(0,i.jsxs)(n.p,{children:["Then, the ",(0,i.jsxs)(n.a,{href:"/chat",children:["OpenRAG ",(0,i.jsx)(n.strong,{children:"Chat"})]})," can run ",(0,i.jsx)(n.a,{href:"https://www.ibm.com/think/topics/vector-search",children:"similarity searches"})," against your OpenSearch database to retrieve relevant information and generate context-aware responses."]}),"\n",(0,i.jsxs)(n.p,{children:["You can configure how documents are ingested and how the ",(0,i.jsx)(n.strong,{children:"Chat"})," interacts with your knowledge base."]}),"\n",(0,i.jsx)(n.h2,{id:"browse-knowledge",children:"Browse knowledge"}),"\n",(0,i.jsxs)(n.p,{children:["The ",(0,i.jsx)(n.strong,{children:"Knowledge"})," page lists the documents OpenRAG has ingested into your OpenSearch database, specifically in an ",(0,i.jsx)(n.a,{href:"https://docs.opensearch.org/latest/getting-started/intro/#index",children:"OpenSearch index"})," named ",(0,i.jsx)(n.code,{children:"documents"}),"."]}),"\n",(0,i.jsxs)(n.p,{children:["To explore the raw contents of your knowledge base, click ",(0,i.jsx)(r.A,{name:"Library","aria-hidden":"true"})," ",(0,i.jsx)(n.strong,{children:"Knowledge"})," to get a list of all ingested documents.\nClick a document to view the chunks produced from splitting the document during ingestion."]}),"\n",(0,i.jsx)(n.h3,{id:"default-documents",children:"Default documents"}),"\n",(0,i.jsxs)(n.p,{children:["By default, OpenRAG includes some initial documents about OpenRAG.\nThese documents are ingested automatically during the ",(0,i.jsx)(n.a,{href:"/install#application-onboarding",children:"application onboarding process"}),"."]}),"\n",(0,i.jsxs)(n.p,{children:["You can use these documents to ask OpenRAG about itself, and to test the ",(0,i.jsx)(n.a,{href:"/chat",children:(0,i.jsx)(n.strong,{children:"Chat"})})," feature before uploading your own documents."]}),"\n",(0,i.jsxs)(n.p,{children:["If you ",(0,i.jsx)(n.a,{href:"#delete-knowledge",children:"delete"})," these documents, you won't be able to ask OpenRAG about itself and it's own functionality.\nIt is recommended that you keep these documents, and use ",(0,i.jsx)(n.a,{href:"/knowledge-filters",children:"filters"})," to separate them from your other knowledge."]}),"\n",(0,i.jsx)(n.h2,{id:"auth",children:"OpenSearch authentication and document access"}),"\n",(0,i.jsxs)(n.p,{children:["When you ",(0,i.jsx)(n.a,{href:"/install-options",children:"install OpenRAG"}),", you provide the initial configuration values for your OpenRAG services, including authentication credentials for OpenSearch and OAuth connectors.\nThis configuration determines how OpenRAG authenticates with your deployment's OpenSearch instance, and it controls user access to documents in your knowledge base:"]}),"\n",(0,i.jsx)(a.Ay,{}),"\n",(0,i.jsx)(n.h2,{id:"opensearch-indexes",children:"OpenSearch indexes"}),"\n",(0,i.jsxs)(n.p,{children:["An ",(0,i.jsx)(n.a,{href:"https://docs.opensearch.org/latest/getting-started/intro/#index",children:"OpenSearch index"})," is a collection of documents in an OpenSearch database."]}),"\n",(0,i.jsxs)(n.p,{children:["By default, all documents you upload to your OpenRAG knowledge base are stored in an index named ",(0,i.jsx)(n.code,{children:"documents"}),"."]}),"\n",(0,i.jsxs)(n.p,{children:["It is possible to change the index name by ",(0,i.jsx)(n.a,{href:"/agents#inspect-and-modify-flows",children:"editing the ingestion flow"}),".\nHowever, this can impact dependent processes, such as the ",(0,i.jsx)(n.a,{href:"/knowledge-filters",children:"filters"})," and ",(0,i.jsx)(n.a,{href:"/chat",children:(0,i.jsx)(n.strong,{children:"Chat"})})," flow, that reference the ",(0,i.jsx)(n.code,{children:"documents"})," index by default.\nMake sure you edit other flows as needed to ensure all processes use the same index name."]}),"\n",(0,i.jsxs)(n.p,{children:["If you encounter errors or unexpected behavior after changing the index name, you can ",(0,i.jsx)(n.a,{href:"/agents#revert-a-built-in-flow-to-its-original-configuration",children:"revert the flows to their original configuration"}),", or ",(0,i.jsx)(n.a,{href:"/knowledge#delete-knowledge",children:"delete knowledge"})," to clear the existing documents from your knowledge base."]}),"\n",(0,i.jsx)(n.h2,{id:"knowledge-ingestion-settings",children:"Knowledge ingestion settings"}),"\n",(0,i.jsx)(n.admonition,{type:"warning",children:(0,i.jsx)(n.p,{children:"Knowledge ingestion settings apply to documents you upload after making the changes.\nDocuments uploaded before changing these settings aren't reprocessed."})}),"\n",(0,i.jsx)(n.p,{children:"After changing knowledge ingestion settings, you must determine if you need to reupload any documents to be consistent with the new settings."}),"\n",(0,i.jsx)(n.p,{children:"It isn't always necessary to reupload documents after changing knowledge ingestion settings.\nFor example, it is typical to upload some documents with OCR enabled and others without OCR enabled."}),"\n",(0,i.jsxs)(n.p,{children:["If needed, you can use ",(0,i.jsx)(n.a,{href:"/knowledge-filters",children:"filters"})," to separate documents that you uploaded with different settings, such as different embedding models."]}),"\n",(0,i.jsx)(n.h3,{id:"set-the-embedding-model-and-dimensions",children:"Set the embedding model and dimensions"}),"\n",(0,i.jsxs)(n.p,{children:["When you ",(0,i.jsx)(n.a,{href:"/install-options",children:"install OpenRAG"}),", you select at least one embedding model during the ",(0,i.jsx)(n.a,{href:"/install#application-onboarding",children:"application onboarding process"}),".\nOpenRAG automatically detects and configures the appropriate vector dimensions for your selected embedding model, ensuring optimal search performance and compatibility."]}),"\n",(0,i.jsxs)(n.p,{children:["In the OpenRAG repository, you can find the complete list of supported models in ",(0,i.jsx)(n.a,{href:"https://github.com/langflow-ai/openrag/blob/main/src/services/models_service.py",children:(0,i.jsx)(n.code,{children:"models_service.py"})})," and the corresponding vector dimensions in ",(0,i.jsx)(n.a,{href:"https://github.com/langflow-ai/openrag/blob/main/src/config/settings.py",children:(0,i.jsx)(n.code,{children:"settings.py"})}),"."]}),"\n",(0,i.jsxs)(n.p,{children:["During the application onboarding process, you can select from the supported models.\nThe default embedding dimension is ",(0,i.jsx)(n.code,{children:"1536"}),", and the default model is the OpenAI ",(0,i.jsx)(n.code,{children:"text-embedding-3-small"}),"."]}),"\n",(0,i.jsxs)(n.p,{children:["If you want to use an unsupported model, you must manually set the model in your ",(0,i.jsxs)(n.a,{href:"/reference/configuration",children:["OpenRAG ",(0,i.jsx)(n.code,{children:".env"})," file"]}),".\nIf you use an unsupported embedding model that doesn't have defined dimensions in ",(0,i.jsx)(n.code,{children:"settings.py"}),", then OpenRAG falls back to the default dimensions (1536) and logs a warning. OpenRAG's OpenSearch instance and flows continue to work, but ",(0,i.jsx)(n.a,{href:"https://www.ibm.com/think/topics/vector-search",children:"similarity search"})," quality can be affected if the actual model dimensions aren't 1536."]}),"\n",(0,i.jsxs)(n.p,{children:["To change the embedding model after onboarding, it is recommended that you modify the embedding model setting in the OpenRAG ",(0,i.jsx)(n.strong,{children:"Settings"})," page or in your ",(0,i.jsxs)(n.a,{href:"/reference/configuration",children:["OpenRAG ",(0,i.jsx)(n.code,{children:".env"})," file"]}),".\nThis will automatically update all relevant ",(0,i.jsx)(n.a,{href:"/agents",children:"OpenRAG flows"})," to use the new embedding model configuration."]}),"\n",(0,i.jsx)(n.h3,{id:"set-docling-parameters",children:"Set Docling parameters"}),"\n",(0,i.jsxs)(n.p,{children:["OpenRAG uses ",(0,i.jsx)(n.a,{href:"https://docling-project.github.io/docling/",children:"Docling"})," for document ingestion because it supports many file formats, processes tables and images well, and performs efficiently."]}),"\n",(0,i.jsxs)(n.p,{children:["When you ",(0,i.jsx)(n.a,{href:"/ingestion",children:"upload documents"}),", Docling processes the files, splits them into chunks, and stores them as separate, structured documents in your OpenSearch knowledge base."]}),"\n",(0,i.jsx)(n.p,{children:"You can use either Docling Serve or OpenRAG's built-in Docling ingestion pipeline to process documents."}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.strong,{children:"Docling Serve ingestion"}),": By default, OpenRAG uses ",(0,i.jsx)(n.a,{href:"https://github.com/docling-project/docling-serve",children:"Docling Serve"}),".\nThis means that OpenRAG starts a ",(0,i.jsx)(n.code,{children:"docling serve"})," process on your local machine and runs Docling ingestion through an API service."]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.strong,{children:"Built-in Docling ingestion"}),": If you want to use OpenRAG's built-in Docling ingestion pipeline instead of the separate Docling Serve service, set ",(0,i.jsx)(n.code,{children:"DISABLE_INGEST_WITH_LANGFLOW=true"})," in your ",(0,i.jsx)(n.a,{href:"/reference/configuration#document-processing-settings",children:"OpenRAG environment variables"}),"."]}),"\n",(0,i.jsx)(n.p,{children:"The built-in pipeline uses the Docling processor directly instead of through the Docling Serve API."}),"\n",(0,i.jsxs)(n.p,{children:["For the underlying functionality, see ",(0,i.jsx)(n.a,{href:"https://github.com/langflow-ai/openrag/blob/main/src/models/processors.py#L58",children:(0,i.jsx)(n.code,{children:"processors.py"})})," in the OpenRAG repository."]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(n.p,{children:["To modify the Docling ingestion and embedding parameters, click ",(0,i.jsx)(r.A,{name:"Settings2","aria-hidden":"true"})," ",(0,i.jsx)(n.strong,{children:"Settings"})," in the OpenRAG user interface."]}),"\n",(0,i.jsx)(n.admonition,{type:"tip",children:(0,i.jsxs)(n.p,{children:["OpenRAG warns you if ",(0,i.jsx)(n.code,{children:"docling serve"})," isn't running.\nFor information about starting and stopping OpenRAG native services, like Docling, see ",(0,i.jsx)(n.a,{href:"/manage-services",children:"Manage OpenRAG services"}),"."]})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.strong,{children:"Embedding model"}),": Select the model to use to generate vector embeddings for your documents."]}),"\n",(0,i.jsxs)(n.p,{children:["This is initially set during installation.\nThe recommended way to change this setting is in the OpenRAG ",(0,i.jsx)(n.strong,{children:"Settings"})," or your ",(0,i.jsxs)(n.a,{href:"/reference/configuration",children:["OpenRAG ",(0,i.jsx)(n.code,{children:".env"})," file"]}),".\nThis will automatically update all relevant ",(0,i.jsx)(n.a,{href:"/agents",children:"OpenRAG flows"})," to use the new embedding model configuration."]}),"\n",(0,i.jsxs)(n.p,{children:["If you uploaded documents prior to changing the embedding model, you can ",(0,i.jsx)(n.a,{href:"/knowledge-filters",children:"create filters"})," to separate documents embedded with different models, or you can reupload all documents to regenerate embeddings with the new model.\nIf you want to use multiple embeddings models, similarity search (in the ",(0,i.jsx)(n.strong,{children:"Chat"}),") can take longer as it searching each model's embeddings separately."]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.strong,{children:"Chunk size"}),": Set the number of characters for each text chunk when breaking down a file.\nLarger chunks yield more context per chunk, but can include irrelevant information. Smaller chunks yield more precise semantic search, but can lack context.\nThe default value is 1000 characters, which is usually a good balance between context and precision."]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.strong,{children:"Chunk overlap"}),": Set the number of characters to overlap over chunk boundaries.\nUse larger overlap values for documents where context is most important. Use smaller overlap values for simpler documents or when optimization is most important.\nThe default value is 200 characters, which represents an overlap of 20 percent if the ",(0,i.jsx)(n.strong,{children:"Chunk size"})," is 1000. This is suitable for general use. For faster processing, decrease the overlap to approximately 10 percent. For more complex documents where you need to preserve context across chunks, increase it to approximately 40 percent."]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.strong,{children:"Table Structure"}),": Enables Docling's ",(0,i.jsx)(n.a,{href:"https://docling-project.github.io/docling/reference/document_converter/",children:(0,i.jsx)(n.code,{children:"DocumentConverter"})})," tool for parsing tables. Instead of treating tables as plain text, tables are output as structured table data with preserved relationships and metadata. This option is enabled by default."]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.strong,{children:"OCR"}),": Enables Optical Character Recognition (OCR) processing when extracting text from images and ingesting scanned documents. This setting is best suited for processing text-based documents faster with Docling's ",(0,i.jsx)(n.a,{href:"https://docling-project.github.io/docling/reference/document_converter/",children:(0,i.jsx)(n.code,{children:"DocumentConverter"})}),". Images are ignored and not processed."]}),"\n",(0,i.jsx)(n.p,{children:"This option is disabled by default. Enabling OCR can slow ingestion performance."}),"\n",(0,i.jsxs)(n.p,{children:["If OpenRAG detects that the local machine is running on macOS, OpenRAG uses the ",(0,i.jsx)(n.a,{href:"https://www.piwheels.org/project/ocrmac/",children:"ocrmac"})," OCR engine. Other platforms use ",(0,i.jsx)(n.a,{href:"https://www.jaided.ai/easyocr/",children:"easyocr"}),"."]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.strong,{children:"Picture descriptions"}),": Only applicable if ",(0,i.jsx)(n.strong,{children:"OCR"})," is enabled. Adds image descriptions generated by the ",(0,i.jsx)(n.a,{href:"https://huggingface.co/HuggingFaceTB/SmolVLM-Instruct",children:(0,i.jsx)(n.code,{children:"SmolVLM-256M-Instruct"})})," model. Enabling picture descriptions can slow ingestion performance."]}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(n.h3,{id:"set-the-local-documents-path",children:"Set the local documents path"}),"\n",(0,i.jsxs)(n.p,{children:["The default path for local uploads is ",(0,i.jsx)(n.code,{children:"~/.openrag/documents"}),". This is mounted to the ",(0,i.jsx)(n.code,{children:"/app/openrag-documents/"})," directory inside the OpenRAG container. Files added to the host or container directory are visible in both locations."]}),"\n",(0,i.jsxs)(n.p,{children:["To change this location, modify the ",(0,i.jsx)(n.strong,{children:"Documents Paths"})," variable in either the ",(0,i.jsxs)(n.a,{href:"/install#setup",children:[(0,i.jsx)(n.strong,{children:"Basic/Advanced Setup"})," menu"]})," or in your ",(0,i.jsxs)(n.a,{href:"/reference/configuration",children:["OpenRAG ",(0,i.jsx)(n.code,{children:".env"})," file"]}),"."]}),"\n",(0,i.jsx)(n.h2,{id:"delete-knowledge",children:"Delete knowledge"}),"\n",(0,i.jsx)(n.admonition,{type:"warning",children:(0,i.jsx)(n.p,{children:"This is a destructive operation that cannot be undone."})}),"\n",(0,i.jsxs)(n.p,{children:["To clear your entire knowledge base, ",(0,i.jsx)(n.a,{href:"/manage-services#reset-containers",children:"reset your OpenRAG containers"})," or ",(0,i.jsx)(n.a,{href:"/reinstall",children:"reinstall OpenRAG"}),"."]}),"\n",(0,i.jsx)(n.h2,{id:"see-also",children:"See also"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.a,{href:"/ingestion",children:"Ingest knowledge"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.a,{href:"/knowledge-filters",children:"Filter knowledge"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.a,{href:"/chat",children:"Chat with knowledge"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.a,{href:"/agents#inspect-and-modify-flows",children:"Inspect and modify flows"})}),"\n"]})]})}function p(e={}){const{wrapper:n}={...(0,o.R)(),...e.components};return n?(0,i.jsx)(n,{...e,children:(0,i.jsx)(u,{...e})}):u(e)}},7637:(e,n,s)=>{s.d(n,{Ay:()=>a,RM:()=>o});var t=s(4848),i=s(8453);const o=[];function r(e){const n={a:"a",code:"code",li:"li",p:"p",strong:"strong",ul:"ul",...(0,i.R)(),...e.components};return(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.strong,{children:"No-auth mode"}),": If you select ",(0,t.jsx)(n.strong,{children:"Basic Setup"})," in the ",(0,t.jsx)(n.a,{href:"/tui",children:"TUI"}),", or your ",(0,t.jsxs)(n.a,{href:"/reference/configuration",children:["OpenRAG ",(0,t.jsx)(n.code,{children:".env"})," file"]})," doesn't include OAuth credentials, then the OpenRAG OpenSearch instance runs in no-auth mode."]}),"\n",(0,t.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,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.strong,{children:"OAuth mode"}),": If you select ",(0,t.jsx)(n.strong,{children:"Advanced Setup"})," in the ",(0,t.jsx)(n.a,{href:"/tui",children:"TUI"}),", or your ",(0,t.jsxs)(n.a,{href:"/reference/configuration",children:["OpenRAG ",(0,t.jsx)(n.code,{children:".env"})," file"]})," includes OAuth credentials, then the OpenRAG OpenSearch instance runs in OAuth mode."]}),"\n",(0,t.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,t.jsxs)(n.p,{children:["To enable OAuth mode after initial setup, see ",(0,t.jsx)(n.a,{href:"/ingestion#oauth-ingestion",children:"Ingest files with OAuth connectors"}),"."]}),"\n"]}),"\n"]})}function a(e={}){const{wrapper:n}={...(0,i.R)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(r,{...e})}):r(e)}},9179:(e,n,s)=>{s.d(n,{A:()=>o});s(6540);var t=s(7856),i=s(4848);function o({name:e,...n}){const s=t[e];return s?(0,i.jsx)(s,{...n}):null}}}]); \ No newline at end of file diff --git a/assets/js/441f609b.cb3f5111.js b/assets/js/441f609b.ca64d962.js similarity index 99% rename from assets/js/441f609b.cb3f5111.js rename to assets/js/441f609b.ca64d962.js index 9e1b70c6..8d63a5c7 100644 --- a/assets/js/441f609b.cb3f5111.js +++ b/assets/js/441f609b.ca64d962.js @@ -1 +1 @@ -"use strict";(globalThis.webpackChunkopenrag_docs=globalThis.webpackChunkopenrag_docs||[]).push([[8617],{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",(0,r.jsxs)(n.p,{children:["The OpenRAG team recommends, at minimum, 8 GB of RAM for container VMs.\nHowever, if you plan to upload large files regularly, more RAM is recommended.\nFor more information, see ",(0,r.jsx)(n.a,{href:"/support/troubleshoot",children:"Troubleshoot OpenRAG"}),"."]}),"\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:()=>d});var r=s(4848),t=s(8453),o=s(9179),i=s(1470),a=s(9365),l=s(3059);const d=[{value:"Complete the application onboarding process",id:"application-onboarding",level:2},...l.RM];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)(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:"Use environment API key"})," 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"]}),"\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:["For ",(0,r.jsx)(n.strong,{children:"watsonx.ai API Endpoint"}),", select the base URL for your watsonx.ai model deployment."]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsx)(n.p,{children:"Enter your watsonx.ai deployment's project ID and API key."}),"\n",(0,r.jsxs)(n.p,{children:["You can enable ",(0,r.jsx)(n.strong,{children:"Use environment API key"})," 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"]}),"\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 the OpenRAG onboarding dialog, enter your Ollama server's base URL:"}),"\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"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsx)(n.p,{children:"Select the language model that your Ollama server is running."}),"\n",(0,r.jsx)(n.p,{children:"If your server isn't running any language models, you must either deploy a language model on your Ollama server, or use another provider for the language model."}),"\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"]}),"\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 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:"Use environment API key"})," 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"]}),"\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)(c,{...e})}):c(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),d=s(7485),c=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,c.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,d.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})),[d,c]=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}),g=(()=>{const e=d??u;return x({value:e,tabValues:o})?e:null})();(0,l.A)(()=>{g&&a(g)},[g]);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),c(e),j(e)},[c,j,o]),tabValues:o}}var g=s(2303);const f={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_)(),d=e=>{const n=e.currentTarget,t=a.indexOf(n),i=o[t].value;i!==s&&(l(n),r(i))},c=e=>{let n=null;switch(e.key){case"Enter":d(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:c,onClick:d,...r,className:(0,t.A)("tabs__item",f.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",f.tabList),children:[(0,v.jsx)(y,{...n,...e}),(0,v.jsx)(A,{...n,...e})]})}function w(e){const n=(0,g.A)();return(0,v.jsx)(b,{...e,children:u(e.children)},String(n))}},2061:(e,n,s)=>{s.d(n,{Ay:()=>c,RM:()=>l});var r=s(4848),t=s(8453),o=s(1470),i=s(9365),a=s(7637);const l=[...a.RM];function d(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, select ",(0,r.jsx)(n.strong,{children:"Basic Setup"}),"."]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsx)(n.p,{children:"Enter administrator passwords for the OpenRAG OpenSearch and Langflow services."}),"\n",(0,r.jsx)(n.p,{children:"The OpenSearch password is required, and a secure password is automatically generated if you don't provide one manually."}),"\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",(0,r.jsxs)(n.p,{children:["You can click ",(0,r.jsx)(n.strong,{children:"Generate Password"})," to create a Langflow password and username automatically."]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["Optional: Under ",(0,r.jsx)(n.strong,{children:"API Keys"}),", enter your model provider credentials, or leave these fields empty if you want to configure model provider credentials during the application onboarding process."]}),"\n",(0,r.jsxs)(n.p,{children:["There is no material difference between providing these values now or during the ",(0,r.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,r.jsx)(n.strong,{children:"Use environment API key"})," option."]}),"\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."}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["Optional: Under ",(0,r.jsx)(n.strong,{children:"Others"}),", edit the ",(0,r.jsx)(n.a,{href:"/knowledge",children:"knowledge base"})," paths if you don't want to use the default paths:"]}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"Documents Paths"}),": One or more paths to directories are where OpenRAG looks for documents to ingest."]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"OpenSearch Data PAth"}),": Specify the path where you want OpenRAG to create your OpenSearch index."]}),"\n"]}),"\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 keys, 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 OpenRAG"})," to start the OpenRAG services."]}),"\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:["Click ",(0,r.jsx)(n.strong,{children:"Close"}),", and then click ",(0,r.jsx)(n.strong,{children:"Launch OpenRAG"})," or navigate to ",(0,r.jsx)(n.code,{children:"localhost:3000"})," in your browser."]}),"\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, select ",(0,r.jsx)(n.strong,{children:"Advanced Setup"}),"."]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsx)(n.p,{children:"Enter administrator passwords for the OpenRAG OpenSearch and Langflow services."}),"\n",(0,r.jsx)(n.p,{children:"The OpenSearch password is required, and a secure password is automatically generated if you don't provide one manually."}),"\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",(0,r.jsxs)(n.p,{children:["You can click ",(0,r.jsx)(n.strong,{children:"Generate Password"})," to create a Langflow password and username automatically."]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["Optional: Under ",(0,r.jsx)(n.strong,{children:"API Keys"}),", enter your model provider credentials, or leave the ",(0,r.jsx)(n.strong,{children:"OpenAI"}),", ",(0,r.jsx)(n.strong,{children:"Anthropic"}),", ",(0,r.jsx)(n.strong,{children:"Ollama"}),", and ",(0,r.jsx)(n.strong,{children:"IBM watsonx.ai"})," fields empty if you want to configure model provider credentials during the application onboarding process."]}),"\n",(0,r.jsxs)(n.p,{children:["There is no material difference between providing these values now or during the ",(0,r.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,r.jsx)(n.strong,{children:"Use environment API key"})," option."]}),"\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."}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["Recommended: To upload documents from external storage, such as Google Drive, add the required OAuth credentials for the connectors that you want to use under ",(0,r.jsx)(n.strong,{children:"API Keys"}),". 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:"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",(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"]}),"\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:"Register the redirect URIs shown in the TUI in your OAuth provider.\nThese are the URLs your OAuth provider will use to redirect users back to OpenRAG after they sign in."}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["Optional: Under ",(0,r.jsx)(n.strong,{children:"Others"}),", you can edit the following settings if needed:"]}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"Documents Paths"}),": Use the default path or provide one or more paths to directories are where OpenRAG looks for documents to ingest in to your ",(0,r.jsx)(n.a,{href:"/knowledge",children:"knowledge base"}),"."]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"OpenSearch Data Path"}),": Specify the path where you want OpenRAG to create your OpenSearch index."]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsxs)(n.strong,{children:["Langflow Public URL (",(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.jsxs)(n.strong,{children:["Webhook Base URL (",(0,r.jsx)(n.code,{children:"WEBHOOK_BASE_URL"}),")"]}),": If applicable, set the base address for your OAuth connector endpoints. If set, the OAuth connector webhook URLs are constructed as ",(0,r.jsx)(n.code,{children:"WEBHOOK_BASE_URL/connectors/${provider}/webhook"}),"."]}),"\n"]}),"\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 OpenRAG"})," to start the OpenRAG services."]}),"\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:["Click ",(0,r.jsx)(n.strong,{children:"Close"}),", and then click ",(0,r.jsx)(n.strong,{children:"Launch OpenRAG"})," or navigate to ",(0,r.jsx)(n.code,{children:"localhost:3000"})," in your browser."]}),"\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.jsxs)(n.p,{children:["Continue with the ",(0,r.jsx)(n.a,{href:"#application-onboarding",children:"application onboarding process"}),"."]}),"\n"]}),"\n"]})})]})]})}function c(e={}){const{wrapper:n}={...(0,t.R)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(d,{...e})}):d(e)}},2068:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>m,contentTitle:()=>x,default:()=>f,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),o=s(8453),i=(s(1470),s(9365),s(887)),a=s(2061),l=s(3351),d=s(309),c=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},...c.RM,...h.RM,...d.RM,...l.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},...a.RM,...i.RM,...u.RM];function g(e){const n={a:"a",code:"code",h2:"h2",h3:"h3",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,o.R)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsxs)(n.p,{children:["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)(c.Ay,{}),"\n",(0,t.jsx)(h.Ay,{}),"\n",(0,t.jsx)(d.Ay,{}),"\n",(0,t.jsx)(l.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)(a.Ay,{}),"\n",(0,t.jsx)(i.Ay,{}),"\n",(0,t.jsx)(u.Ay,{})]})}function f(e={}){const{wrapper:n}={...(0,o.R)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(g,{...e})}):g(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)}},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 +"use strict";(globalThis.webpackChunkopenrag_docs=globalThis.webpackChunkopenrag_docs||[]).push([[8617],{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",(0,r.jsxs)(n.p,{children:["The OpenRAG team recommends, at minimum, 8 GB of RAM for container VMs.\nHowever, if you plan to upload large files regularly, more RAM is recommended.\nFor more information, see ",(0,r.jsx)(n.a,{href:"/support/troubleshoot",children:"Troubleshoot OpenRAG"}),"."]}),"\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:()=>d});var r=s(4848),t=s(8453),o=s(9179),i=s(1470),a=s(9365),l=s(3059);const d=[{value:"Complete the application onboarding process",id:"application-onboarding",level:2},...l.RM];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)(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:"Use environment API key"})," 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"]}),"\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:["For ",(0,r.jsx)(n.strong,{children:"watsonx.ai API Endpoint"}),", select the base URL for your watsonx.ai model deployment."]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsx)(n.p,{children:"Enter your watsonx.ai deployment's project ID and API key."}),"\n",(0,r.jsxs)(n.p,{children:["You can enable ",(0,r.jsx)(n.strong,{children:"Use environment API key"})," 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"]}),"\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 the OpenRAG onboarding dialog, enter your Ollama server's base URL:"}),"\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"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsx)(n.p,{children:"Select the language model that your Ollama server is running."}),"\n",(0,r.jsx)(n.p,{children:"If your server isn't running any language models, you must either deploy a language model on your Ollama server, or use another provider for the language model."}),"\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"]}),"\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 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:"Use environment API key"})," 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"]}),"\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)(c,{...e})}):c(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),d=s(7485),c=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,c.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,d.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})),[d,c]=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}),g=(()=>{const e=d??u;return x({value:e,tabValues:o})?e:null})();(0,l.A)(()=>{g&&a(g)},[g]);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),c(e),j(e)},[c,j,o]),tabValues:o}}var g=s(2303);const f={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_)(),d=e=>{const n=e.currentTarget,t=a.indexOf(n),i=o[t].value;i!==s&&(l(n),r(i))},c=e=>{let n=null;switch(e.key){case"Enter":d(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:c,onClick:d,...r,className:(0,t.A)("tabs__item",f.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",f.tabList),children:[(0,v.jsx)(y,{...n,...e}),(0,v.jsx)(A,{...n,...e})]})}function w(e){const n=(0,g.A)();return(0,v.jsx)(b,{...e,children:u(e.children)},String(n))}},2061:(e,n,s)=>{s.d(n,{Ay:()=>c,RM:()=>l});var r=s(4848),t=s(8453),o=s(1470),i=s(9365),a=s(7637);const l=[...a.RM];function d(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, select ",(0,r.jsx)(n.strong,{children:"Basic Setup"}),"."]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsx)(n.p,{children:"Enter administrator passwords for the OpenRAG OpenSearch and Langflow services."}),"\n",(0,r.jsx)(n.p,{children:"The OpenSearch password is required, and a secure password is automatically generated if you don't provide one manually."}),"\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",(0,r.jsxs)(n.p,{children:["You can click ",(0,r.jsx)(n.strong,{children:"Generate Password"})," to create a Langflow password and username automatically."]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["Optional: Under ",(0,r.jsx)(n.strong,{children:"API Keys"}),", enter your model provider credentials, or leave these fields empty if you want to configure model provider credentials during the application onboarding process."]}),"\n",(0,r.jsxs)(n.p,{children:["There is no material difference between providing these values now or during the ",(0,r.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,r.jsx)(n.strong,{children:"Use environment API key"})," option."]}),"\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."}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["Optional: Under ",(0,r.jsx)(n.strong,{children:"Others"}),", edit the ",(0,r.jsx)(n.a,{href:"/knowledge",children:"knowledge base"})," paths if you don't want to use the default paths:"]}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"Documents Paths"}),": One or more paths to directories are where OpenRAG looks for documents to ingest."]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"OpenSearch Data Path"}),": Specify the path where you want OpenRAG to create your OpenSearch index."]}),"\n"]}),"\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 keys, 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 OpenRAG"})," to start the OpenRAG services."]}),"\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:["Click ",(0,r.jsx)(n.strong,{children:"Close"}),", and then click ",(0,r.jsx)(n.strong,{children:"Launch OpenRAG"})," or navigate to ",(0,r.jsx)(n.code,{children:"localhost:3000"})," in your browser."]}),"\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, select ",(0,r.jsx)(n.strong,{children:"Advanced Setup"}),"."]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsx)(n.p,{children:"Enter administrator passwords for the OpenRAG OpenSearch and Langflow services."}),"\n",(0,r.jsx)(n.p,{children:"The OpenSearch password is required, and a secure password is automatically generated if you don't provide one manually."}),"\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",(0,r.jsxs)(n.p,{children:["You can click ",(0,r.jsx)(n.strong,{children:"Generate Password"})," to create a Langflow password and username automatically."]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["Optional: Under ",(0,r.jsx)(n.strong,{children:"API Keys"}),", enter your model provider credentials, or leave the ",(0,r.jsx)(n.strong,{children:"OpenAI"}),", ",(0,r.jsx)(n.strong,{children:"Anthropic"}),", ",(0,r.jsx)(n.strong,{children:"Ollama"}),", and ",(0,r.jsx)(n.strong,{children:"IBM watsonx.ai"})," fields empty if you want to configure model provider credentials during the application onboarding process."]}),"\n",(0,r.jsxs)(n.p,{children:["There is no material difference between providing these values now or during the ",(0,r.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,r.jsx)(n.strong,{children:"Use environment API key"})," option."]}),"\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."}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["Recommended: To upload documents from external storage, such as Google Drive, add the required OAuth credentials for the connectors that you want to use under ",(0,r.jsx)(n.strong,{children:"API Keys"}),". 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:"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",(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"]}),"\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:"Register the redirect URIs shown in the TUI in your OAuth provider.\nThese are the URLs your OAuth provider will use to redirect users back to OpenRAG after they sign in."}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["Optional: Under ",(0,r.jsx)(n.strong,{children:"Others"}),", you can edit the following settings if needed:"]}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"Documents Paths"}),": Use the default path or provide one or more paths to directories are where OpenRAG looks for documents to ingest in to your ",(0,r.jsx)(n.a,{href:"/knowledge",children:"knowledge base"}),"."]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"OpenSearch Data Path"}),": Specify the path where you want OpenRAG to create your OpenSearch index."]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsxs)(n.strong,{children:["Langflow Public URL (",(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.jsxs)(n.strong,{children:["Webhook Base URL (",(0,r.jsx)(n.code,{children:"WEBHOOK_BASE_URL"}),")"]}),": If applicable, set the base address for your OAuth connector endpoints. If set, the OAuth connector webhook URLs are constructed as ",(0,r.jsx)(n.code,{children:"WEBHOOK_BASE_URL/connectors/${provider}/webhook"}),"."]}),"\n"]}),"\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 OpenRAG"})," to start the OpenRAG services."]}),"\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:["Click ",(0,r.jsx)(n.strong,{children:"Close"}),", and then click ",(0,r.jsx)(n.strong,{children:"Launch OpenRAG"})," or navigate to ",(0,r.jsx)(n.code,{children:"localhost:3000"})," in your browser."]}),"\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.jsxs)(n.p,{children:["Continue with the ",(0,r.jsx)(n.a,{href:"#application-onboarding",children:"application onboarding process"}),"."]}),"\n"]}),"\n"]})})]})]})}function c(e={}){const{wrapper:n}={...(0,t.R)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(d,{...e})}):d(e)}},2068:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>m,contentTitle:()=>x,default:()=>f,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),o=s(8453),i=(s(1470),s(9365),s(887)),a=s(2061),l=s(3351),d=s(309),c=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},...c.RM,...h.RM,...d.RM,...l.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},...a.RM,...i.RM,...u.RM];function g(e){const n={a:"a",code:"code",h2:"h2",h3:"h3",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,o.R)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsxs)(n.p,{children:["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)(c.Ay,{}),"\n",(0,t.jsx)(h.Ay,{}),"\n",(0,t.jsx)(d.Ay,{}),"\n",(0,t.jsx)(l.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)(a.Ay,{}),"\n",(0,t.jsx)(i.Ay,{}),"\n",(0,t.jsx)(u.Ay,{})]})}function f(e={}){const{wrapper:n}={...(0,o.R)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(g,{...e})}):g(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)}},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.83099c13.js b/assets/js/4ba45368.9417b2ce.js similarity index 99% rename from assets/js/4ba45368.83099c13.js rename to assets/js/4ba45368.9417b2ce.js index 646e4670..ca8e5d5b 100644 --- a/assets/js/4ba45368.83099c13.js +++ b/assets/js/4ba45368.9417b2ce.js @@ -1 +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",(0,r.jsxs)(n.p,{children:["The OpenRAG team recommends, at minimum, 8 GB of RAM for container VMs.\nHowever, if you plan to upload large files regularly, more RAM is recommended.\nFor more information, see ",(0,r.jsx)(n.a,{href:"/support/troubleshoot",children:"Troubleshoot OpenRAG"}),"."]}),"\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:()=>d});var r=s(4848),t=s(8453),o=s(9179),i=s(1470),a=s(9365),l=s(3059);const d=[{value:"Complete the application onboarding process",id:"application-onboarding",level:2},...l.RM];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)(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:"Use environment API key"})," 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"]}),"\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:["For ",(0,r.jsx)(n.strong,{children:"watsonx.ai API Endpoint"}),", select the base URL for your watsonx.ai model deployment."]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsx)(n.p,{children:"Enter your watsonx.ai deployment's project ID and API key."}),"\n",(0,r.jsxs)(n.p,{children:["You can enable ",(0,r.jsx)(n.strong,{children:"Use environment API key"})," 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"]}),"\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 the OpenRAG onboarding dialog, enter your Ollama server's base URL:"}),"\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"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsx)(n.p,{children:"Select the language model that your Ollama server is running."}),"\n",(0,r.jsx)(n.p,{children:"If your server isn't running any language models, you must either deploy a language model on your Ollama server, or use another provider for the language model."}),"\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"]}),"\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 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:"Use environment API key"})," 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"]}),"\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)(c,{...e})}):c(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),d=s(7485),c=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,c.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,d.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,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(!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:o})),[d,c]=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=d??u;return m({value:e,tabValues:o})?e:null})();(0,l.A)(()=>{j&&a(j)},[j]);return{selectedValue:i,selectValue:(0,r.useCallback)(e=>{if(!m({value:e,tabValues:o}))throw new Error(`Can't select invalid tab value=${e}`);a(e),c(e),f(e)},[c,f,o]),tabValues:o}}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:o}){const a=[],{blockElementScrollPositionUntilNextRender:l}=(0,i.a_)(),d=e=>{const n=e.currentTarget,t=a.indexOf(n),i=o[t].value;i!==s&&(l(n),r(i))},c=e=>{let n=null;switch(e.key){case"Enter":d(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:c,onClick:d,...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=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,s)=>{s.d(n,{Ay:()=>c,RM:()=>l});var r=s(4848),t=s(8453),o=s(1470),i=s(9365),a=s(7637);const l=[...a.RM];function d(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, select ",(0,r.jsx)(n.strong,{children:"Basic Setup"}),"."]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsx)(n.p,{children:"Enter administrator passwords for the OpenRAG OpenSearch and Langflow services."}),"\n",(0,r.jsx)(n.p,{children:"The OpenSearch password is required, and a secure password is automatically generated if you don't provide one manually."}),"\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",(0,r.jsxs)(n.p,{children:["You can click ",(0,r.jsx)(n.strong,{children:"Generate Password"})," to create a Langflow password and username automatically."]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["Optional: Under ",(0,r.jsx)(n.strong,{children:"API Keys"}),", enter your model provider credentials, or leave these fields empty if you want to configure model provider credentials during the application onboarding process."]}),"\n",(0,r.jsxs)(n.p,{children:["There is no material difference between providing these values now or during the ",(0,r.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,r.jsx)(n.strong,{children:"Use environment API key"})," option."]}),"\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."}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["Optional: Under ",(0,r.jsx)(n.strong,{children:"Others"}),", edit the ",(0,r.jsx)(n.a,{href:"/knowledge",children:"knowledge base"})," paths if you don't want to use the default paths:"]}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"Documents Paths"}),": One or more paths to directories are where OpenRAG looks for documents to ingest."]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"OpenSearch Data PAth"}),": Specify the path where you want OpenRAG to create your OpenSearch index."]}),"\n"]}),"\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 keys, 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 OpenRAG"})," to start the OpenRAG services."]}),"\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:["Click ",(0,r.jsx)(n.strong,{children:"Close"}),", and then click ",(0,r.jsx)(n.strong,{children:"Launch OpenRAG"})," or navigate to ",(0,r.jsx)(n.code,{children:"localhost:3000"})," in your browser."]}),"\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, select ",(0,r.jsx)(n.strong,{children:"Advanced Setup"}),"."]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsx)(n.p,{children:"Enter administrator passwords for the OpenRAG OpenSearch and Langflow services."}),"\n",(0,r.jsx)(n.p,{children:"The OpenSearch password is required, and a secure password is automatically generated if you don't provide one manually."}),"\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",(0,r.jsxs)(n.p,{children:["You can click ",(0,r.jsx)(n.strong,{children:"Generate Password"})," to create a Langflow password and username automatically."]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["Optional: Under ",(0,r.jsx)(n.strong,{children:"API Keys"}),", enter your model provider credentials, or leave the ",(0,r.jsx)(n.strong,{children:"OpenAI"}),", ",(0,r.jsx)(n.strong,{children:"Anthropic"}),", ",(0,r.jsx)(n.strong,{children:"Ollama"}),", and ",(0,r.jsx)(n.strong,{children:"IBM watsonx.ai"})," fields empty if you want to configure model provider credentials during the application onboarding process."]}),"\n",(0,r.jsxs)(n.p,{children:["There is no material difference between providing these values now or during the ",(0,r.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,r.jsx)(n.strong,{children:"Use environment API key"})," option."]}),"\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."}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["Recommended: To upload documents from external storage, such as Google Drive, add the required OAuth credentials for the connectors that you want to use under ",(0,r.jsx)(n.strong,{children:"API Keys"}),". 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:"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",(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"]}),"\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:"Register the redirect URIs shown in the TUI in your OAuth provider.\nThese are the URLs your OAuth provider will use to redirect users back to OpenRAG after they sign in."}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["Optional: Under ",(0,r.jsx)(n.strong,{children:"Others"}),", you can edit the following settings if needed:"]}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"Documents Paths"}),": Use the default path or provide one or more paths to directories are where OpenRAG looks for documents to ingest in to your ",(0,r.jsx)(n.a,{href:"/knowledge",children:"knowledge base"}),"."]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"OpenSearch Data Path"}),": Specify the path where you want OpenRAG to create your OpenSearch index."]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsxs)(n.strong,{children:["Langflow Public URL (",(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.jsxs)(n.strong,{children:["Webhook Base URL (",(0,r.jsx)(n.code,{children:"WEBHOOK_BASE_URL"}),")"]}),": If applicable, set the base address for your OAuth connector endpoints. If set, the OAuth connector webhook URLs are constructed as ",(0,r.jsx)(n.code,{children:"WEBHOOK_BASE_URL/connectors/${provider}/webhook"}),"."]}),"\n"]}),"\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 OpenRAG"})," to start the OpenRAG services."]}),"\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:["Click ",(0,r.jsx)(n.strong,{children:"Close"}),", and then click ",(0,r.jsx)(n.strong,{children:"Launch OpenRAG"})," or navigate to ",(0,r.jsx)(n.code,{children:"localhost:3000"})," in your browser."]}),"\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.jsxs)(n.p,{children:["Continue with the ",(0,r.jsx)(n.a,{href:"#application-onboarding",children:"application onboarding process"}),"."]}),"\n"]}),"\n"]})})]})]})}function c(e={}){const{wrapper:n}={...(0,t.R)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(d,{...e})}):d(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:()=>x,contentTitle:()=>m,default:()=>g,frontMatter:()=>p,metadata:()=>r,toc:()=>f});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),d=s(309),c=s(6149),h=s(4042),u=s(927);s(7637),s(3059);const p={title:"Invoke OpenRAG with uvx",slug:"/install-uvx"},m=void 0,x={},f=[{value:"Prerequisites",id:"prerequisites",level:2},...c.RM,...h.RM,...d.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)(c.Ay,{}),"\n",(0,t.jsx)(h.Ay,{}),"\n",(0,t.jsx)(d.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,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 +"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",(0,r.jsxs)(n.p,{children:["The OpenRAG team recommends, at minimum, 8 GB of RAM for container VMs.\nHowever, if you plan to upload large files regularly, more RAM is recommended.\nFor more information, see ",(0,r.jsx)(n.a,{href:"/support/troubleshoot",children:"Troubleshoot OpenRAG"}),"."]}),"\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:()=>d});var r=s(4848),t=s(8453),o=s(9179),i=s(1470),a=s(9365),l=s(3059);const d=[{value:"Complete the application onboarding process",id:"application-onboarding",level:2},...l.RM];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)(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:"Use environment API key"})," 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"]}),"\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:["For ",(0,r.jsx)(n.strong,{children:"watsonx.ai API Endpoint"}),", select the base URL for your watsonx.ai model deployment."]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsx)(n.p,{children:"Enter your watsonx.ai deployment's project ID and API key."}),"\n",(0,r.jsxs)(n.p,{children:["You can enable ",(0,r.jsx)(n.strong,{children:"Use environment API key"})," 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"]}),"\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 the OpenRAG onboarding dialog, enter your Ollama server's base URL:"}),"\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"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsx)(n.p,{children:"Select the language model that your Ollama server is running."}),"\n",(0,r.jsx)(n.p,{children:"If your server isn't running any language models, you must either deploy a language model on your Ollama server, or use another provider for the language model."}),"\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"]}),"\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 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:"Use environment API key"})," 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"]}),"\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)(c,{...e})}):c(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),d=s(7485),c=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,c.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,d.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,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(!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:o})),[d,c]=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=d??u;return m({value:e,tabValues:o})?e:null})();(0,l.A)(()=>{j&&a(j)},[j]);return{selectedValue:i,selectValue:(0,r.useCallback)(e=>{if(!m({value:e,tabValues:o}))throw new Error(`Can't select invalid tab value=${e}`);a(e),c(e),f(e)},[c,f,o]),tabValues:o}}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:o}){const a=[],{blockElementScrollPositionUntilNextRender:l}=(0,i.a_)(),d=e=>{const n=e.currentTarget,t=a.indexOf(n),i=o[t].value;i!==s&&(l(n),r(i))},c=e=>{let n=null;switch(e.key){case"Enter":d(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:c,onClick:d,...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=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,s)=>{s.d(n,{Ay:()=>c,RM:()=>l});var r=s(4848),t=s(8453),o=s(1470),i=s(9365),a=s(7637);const l=[...a.RM];function d(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, select ",(0,r.jsx)(n.strong,{children:"Basic Setup"}),"."]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsx)(n.p,{children:"Enter administrator passwords for the OpenRAG OpenSearch and Langflow services."}),"\n",(0,r.jsx)(n.p,{children:"The OpenSearch password is required, and a secure password is automatically generated if you don't provide one manually."}),"\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",(0,r.jsxs)(n.p,{children:["You can click ",(0,r.jsx)(n.strong,{children:"Generate Password"})," to create a Langflow password and username automatically."]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["Optional: Under ",(0,r.jsx)(n.strong,{children:"API Keys"}),", enter your model provider credentials, or leave these fields empty if you want to configure model provider credentials during the application onboarding process."]}),"\n",(0,r.jsxs)(n.p,{children:["There is no material difference between providing these values now or during the ",(0,r.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,r.jsx)(n.strong,{children:"Use environment API key"})," option."]}),"\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."}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["Optional: Under ",(0,r.jsx)(n.strong,{children:"Others"}),", edit the ",(0,r.jsx)(n.a,{href:"/knowledge",children:"knowledge base"})," paths if you don't want to use the default paths:"]}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"Documents Paths"}),": One or more paths to directories are where OpenRAG looks for documents to ingest."]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"OpenSearch Data Path"}),": Specify the path where you want OpenRAG to create your OpenSearch index."]}),"\n"]}),"\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 keys, 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 OpenRAG"})," to start the OpenRAG services."]}),"\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:["Click ",(0,r.jsx)(n.strong,{children:"Close"}),", and then click ",(0,r.jsx)(n.strong,{children:"Launch OpenRAG"})," or navigate to ",(0,r.jsx)(n.code,{children:"localhost:3000"})," in your browser."]}),"\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, select ",(0,r.jsx)(n.strong,{children:"Advanced Setup"}),"."]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsx)(n.p,{children:"Enter administrator passwords for the OpenRAG OpenSearch and Langflow services."}),"\n",(0,r.jsx)(n.p,{children:"The OpenSearch password is required, and a secure password is automatically generated if you don't provide one manually."}),"\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",(0,r.jsxs)(n.p,{children:["You can click ",(0,r.jsx)(n.strong,{children:"Generate Password"})," to create a Langflow password and username automatically."]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["Optional: Under ",(0,r.jsx)(n.strong,{children:"API Keys"}),", enter your model provider credentials, or leave the ",(0,r.jsx)(n.strong,{children:"OpenAI"}),", ",(0,r.jsx)(n.strong,{children:"Anthropic"}),", ",(0,r.jsx)(n.strong,{children:"Ollama"}),", and ",(0,r.jsx)(n.strong,{children:"IBM watsonx.ai"})," fields empty if you want to configure model provider credentials during the application onboarding process."]}),"\n",(0,r.jsxs)(n.p,{children:["There is no material difference between providing these values now or during the ",(0,r.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,r.jsx)(n.strong,{children:"Use environment API key"})," option."]}),"\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."}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["Recommended: To upload documents from external storage, such as Google Drive, add the required OAuth credentials for the connectors that you want to use under ",(0,r.jsx)(n.strong,{children:"API Keys"}),". 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:"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",(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"]}),"\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:"Register the redirect URIs shown in the TUI in your OAuth provider.\nThese are the URLs your OAuth provider will use to redirect users back to OpenRAG after they sign in."}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["Optional: Under ",(0,r.jsx)(n.strong,{children:"Others"}),", you can edit the following settings if needed:"]}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"Documents Paths"}),": Use the default path or provide one or more paths to directories are where OpenRAG looks for documents to ingest in to your ",(0,r.jsx)(n.a,{href:"/knowledge",children:"knowledge base"}),"."]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"OpenSearch Data Path"}),": Specify the path where you want OpenRAG to create your OpenSearch index."]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsxs)(n.strong,{children:["Langflow Public URL (",(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.jsxs)(n.strong,{children:["Webhook Base URL (",(0,r.jsx)(n.code,{children:"WEBHOOK_BASE_URL"}),")"]}),": If applicable, set the base address for your OAuth connector endpoints. If set, the OAuth connector webhook URLs are constructed as ",(0,r.jsx)(n.code,{children:"WEBHOOK_BASE_URL/connectors/${provider}/webhook"}),"."]}),"\n"]}),"\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 OpenRAG"})," to start the OpenRAG services."]}),"\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:["Click ",(0,r.jsx)(n.strong,{children:"Close"}),", and then click ",(0,r.jsx)(n.strong,{children:"Launch OpenRAG"})," or navigate to ",(0,r.jsx)(n.code,{children:"localhost:3000"})," in your browser."]}),"\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.jsxs)(n.p,{children:["Continue with the ",(0,r.jsx)(n.a,{href:"#application-onboarding",children:"application onboarding process"}),"."]}),"\n"]}),"\n"]})})]})]})}function c(e={}){const{wrapper:n}={...(0,t.R)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(d,{...e})}):d(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:()=>x,contentTitle:()=>m,default:()=>g,frontMatter:()=>p,metadata:()=>r,toc:()=>f});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),d=s(309),c=s(6149),h=s(4042),u=s(927);s(7637),s(3059);const p={title:"Invoke OpenRAG with uvx",slug:"/install-uvx"},m=void 0,x={},f=[{value:"Prerequisites",id:"prerequisites",level:2},...c.RM,...h.RM,...d.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)(c.Ay,{}),"\n",(0,t.jsx)(h.Ay,{}),"\n",(0,t.jsx)(d.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,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/749371cc.65b2eb8b.js b/assets/js/749371cc.fa610c63.js similarity index 99% rename from assets/js/749371cc.65b2eb8b.js rename to assets/js/749371cc.fa610c63.js index 344b475f..5e8b18df 100644 --- a/assets/js/749371cc.65b2eb8b.js +++ b/assets/js/749371cc.fa610c63.js @@ -1 +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",(0,s.jsxs)(n.p,{children:["The OpenRAG team recommends, at minimum, 8 GB of RAM for container VMs.\nHowever, if you plan to upload large files regularly, more RAM is recommended.\nFor more information, see ",(0,s.jsx)(n.a,{href:"/support/troubleshoot",children:"Troubleshoot OpenRAG"}),"."]}),"\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:"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"]}),"\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:["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"]}),"\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 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 the language model that your Ollama server is running."}),"\n",(0,s.jsx)(n.p,{children:"If your server isn't running any language models, you must either deploy a 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#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:"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"]}),"\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 y=r(4848);function v({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,y.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,y.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,y.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,y.jsxs)("div",{className:(0,t.A)(o.G.tabs.container,"tabs-container",g.tabList),children:[(0,y.jsx)(v,{...n,...e}),(0,y.jsx)(b,{...n,...e})]})}function w(e){const n=(0,f.A)();return(0,y.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:"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",(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"]}),"\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 configuration for your environment."}),"\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.strong,{children:"GPU-accelerated deployment"}),": If your host machine has an NVIDIA GPU with CUDA support and compatible NVIDIA drivers, use the base ",(0,t.jsx)(n.code,{children:"docker-compose.yml"})," file with the ",(0,t.jsx)(n.code,{children:"docker-compose.gpu.yml"})," override."]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",metastring:'title="Docker"',children:"docker compose -f docker-compose.yml -f docker-compose.gpu.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.yml -f docker-compose.gpu.yml up -d\n"})}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.strong,{children:"CPU-only deployment"})," (default): If your host machine doesn't have NVIDIA GPU support, use the base ",(0,t.jsx)(n.code,{children:"docker-compose.yml"})," file."]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",metastring:'title="Docker"',children:"docker 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 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 +"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",(0,s.jsxs)(n.p,{children:["The OpenRAG team recommends, at minimum, 8 GB of RAM for container VMs.\nHowever, if you plan to upload large files regularly, more RAM is recommended.\nFor more information, see ",(0,s.jsx)(n.a,{href:"/support/troubleshoot",children:"Troubleshoot OpenRAG"}),"."]}),"\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:"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"]}),"\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:["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"]}),"\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 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 the language model that your Ollama server is running."}),"\n",(0,s.jsx)(n.p,{children:"If your server isn't running any language models, you must either deploy a 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#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:"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"]}),"\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 y=r(4848);function v({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,y.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,y.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,y.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,y.jsxs)("div",{className:(0,t.A)(o.G.tabs.container,"tabs-container",g.tabList),children:[(0,y.jsx)(v,{...n,...e}),(0,y.jsx)(b,{...n,...e})]})}function w(e){const n=(0,f.A)();return(0,y.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:"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",(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"]}),"\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 configuration for your environment:"}),"\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.strong,{children:"GPU-accelerated deployment"}),": If your host machine has an NVIDIA GPU with CUDA support and compatible NVIDIA drivers, use the base ",(0,t.jsx)(n.code,{children:"docker-compose.yml"})," file with the ",(0,t.jsx)(n.code,{children:"docker-compose.gpu.yml"})," override."]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",metastring:'title="Docker"',children:"docker compose -f docker-compose.yml -f docker-compose.gpu.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.yml -f docker-compose.gpu.yml up -d\n"})}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.strong,{children:"CPU-only deployment"})," (default): If your host machine doesn't have NVIDIA GPU support, use the base ",(0,t.jsx)(n.code,{children:"docker-compose.yml"})," file."]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",metastring:'title="Docker"',children:"docker 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 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/c8078f0a.70f205a2.js b/assets/js/c8078f0a.70f205a2.js deleted file mode 100644 index 1dbac876..00000000 --- a/assets/js/c8078f0a.70f205a2.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(globalThis.webpackChunkopenrag_docs=globalThis.webpackChunkopenrag_docs||[]).push([[9026],{1381:(e,n,s)=>{s.d(n,{Ay:()=>l,RM:()=>i});var r=s(4848),t=s(8453);const i=[];function d(e){const n={code:"code",pre:"pre",...(0,t.R)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",metastring:'title="Docker"',children:"docker compose up -d\n"})}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",metastring:'title="Podman"',children:"podman compose up -d\n"})})]})}function l(e={}){const{wrapper:n}={...(0,t.R)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(d,{...e})}):d(e)}},8453:(e,n,s)=>{s.d(n,{R:()=>d,x:()=>l});var r=s(6540);const t={},i=r.createContext(t);function d(e){const n=r.useContext(i);return r.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(t):e.components||t:d(e.components),r.createElement(i.Provider,{value:n},e.children)}},9196:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>c,contentTitle:()=>l,default:()=>h,frontMatter:()=>d,metadata:()=>r,toc:()=>o});const r=JSON.parse('{"id":"reference/configuration","title":"Environment variables","description":"OpenRAG\'s .env file is the primary configuration file for OpenRAG.","source":"@site/docs/reference/configuration.mdx","sourceDirName":"reference","slug":"/reference/configuration","permalink":"/reference/configuration","draft":false,"unlisted":false,"editUrl":"https://github.com/openrag/openrag/tree/main/docs/docs/reference/configuration.mdx","tags":[],"version":"current","frontMatter":{"title":"Environment variables","slug":"/reference/configuration"},"sidebar":"tutorialSidebar","previous":{"title":"Chat","permalink":"/chat"},"next":{"title":"Contribute to OpenRAG","permalink":"/support/contribute"}}');var t=s(4848),i=s(8453);s(1381);const d={title:"Environment variables",slug:"/reference/configuration"},l=void 0,c={},o=[{value:"Edit the .env file",id:"set-environment-variables",level:2},{value:"Model provider settings",id:"model-provider-settings",level:2},{value:"Document processing settings",id:"document-processing-settings",level:2},{value:"Langflow settings",id:"langflow-settings",level:2},{value:"OAuth provider settings",id:"oauth-provider-settings",level:2},{value:"OpenSearch settings",id:"opensearch-settings",level:2},{value:"System settings",id:"system-settings",level:2}];function a(e){const n={a:"a",admonition:"admonition",code:"code",em:"em",h2:"h2",li:"li",p:"p",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,i.R)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsxs)(n.p,{children:["OpenRAG's ",(0,t.jsx)(n.code,{children:".env"})," file is the primary configuration file for OpenRAG.\nEnvironment variables in ",(0,t.jsx)(n.code,{children:".env"})," always take precedence over other sources."]}),"\n",(0,t.jsxs)(n.p,{children:["For deployments managed with the Terminal User Interface (TUI), this file is located at ",(0,t.jsx)(n.code,{children:"~/.openrag/tui"}),", and it can be created automatically during ",(0,t.jsx)(n.a,{href:"/install-options",children:"installation"}),"."]}),"\n",(0,t.jsxs)(n.p,{children:["For ",(0,t.jsx)(n.a,{href:"/docker",children:"self-managed deployments"}),", this file can be located at the root of your OpenRAG project directory or referenced from another location."]}),"\n",(0,t.jsxs)(n.p,{children:["For an example, see ",(0,t.jsxs)(n.a,{href:"https://github.com/langflow-ai/openrag/blob/main/.env.example",children:[(0,t.jsx)(n.code,{children:".env.example"})," in the OpenRAG repository"]}),"."]}),"\n",(0,t.jsx)(n.admonition,{type:"tip",children:(0,t.jsxs)(n.p,{children:["OpenRAG's Docker Compose files are populated automatically using values from the ",(0,t.jsx)(n.code,{children:".env"})," file, so you don't need to edit the Docker Compose files manually."]})}),"\n",(0,t.jsxs)(n.p,{children:["If a variable isn't set, OpenRAG uses default or fallback values where available.\nNot all variables have default values, and errors can occur if required variables aren't set.\nDefault values can be found in the reference tables on this page and in ",(0,t.jsx)(n.a,{href:"https://github.com/langflow-ai/openrag/blob/main/src/config/config_manager.py",children:(0,t.jsx)(n.code,{children:"config_manager.py"})}),", ",(0,t.jsx)(n.a,{href:"https://github.com/langflow-ai/openrag/blob/main/src/config/settings.py",children:(0,t.jsx)(n.code,{children:"settings.py"})}),", and ",(0,t.jsx)(n.a,{href:"https://github.com/langflow-ai/openrag/blob/main/src/utils/logging_config.py",children:(0,t.jsx)(n.code,{children:"logging_config.py"})}),"."]}),"\n",(0,t.jsxs)(n.p,{children:["You can ",(0,t.jsx)(n.a,{href:"/agents#modify-a-flow-at-runtime",children:"temporarily set Langflow variables at runtime"}),".\nHowever, these temporary overrides don't overlap with most OpenRAG environment variables.\nThe only exceptions are flow-level Langflow settings, such as the language model used in a flow."]}),"\n",(0,t.jsxs)(n.h2,{id:"set-environment-variables",children:["Edit the ",(0,t.jsx)(n.code,{children:".env"})," file"]}),"\n",(0,t.jsxs)(n.p,{children:["During ",(0,t.jsx)(n.a,{href:"/install-options",children:"installation"}),", an initial ",(0,t.jsx)(n.code,{children:".env"})," file is created automatically or manually.\nYou can edit this file to change OpenRAG configuration settings after installation."]}),"\n",(0,t.jsxs)(n.p,{children:["Each OpenRAG environment variable is either mutable or immutable.\nThis determines the actions you must take to apply changes after editing the ",(0,t.jsx)(n.code,{children:".env"})," file:"]}),"\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.strong,{children:"Mutable environment variables"}),": You can apply changes to mutable environment variables by ",(0,t.jsx)(n.a,{href:"/manage-services",children:"stopping and restarting the OpenRAG services"})," after editing the ",(0,t.jsx)(n.code,{children:".env"})," file."]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.strong,{children:"Immutable environment variables"}),": You must ",(0,t.jsx)(n.a,{href:"/reinstall",children:"redeploy OpenRAG"})," with your modified ",(0,t.jsx)(n.code,{children:".env"})," file if you change immutable environment variables."]}),"\n"]}),"\n"]}),"\n",(0,t.jsx)(n.h2,{id:"model-provider-settings",children:"Model provider settings"}),"\n",(0,t.jsx)(n.p,{children:"Configure which models and providers OpenRAG uses to generate text and embeddings.\nYou only need to provide credentials for the providers you are using in OpenRAG."}),"\n",(0,t.jsxs)(n.p,{children:["These variables are initially set during the ",(0,t.jsx)(n.a,{href:"/install#application-onboarding",children:"application onboarding process"}),".\nSome of these variables are immutable and can only be changed by redeploying OpenRAG, as explained in ",(0,t.jsx)(n.a,{href:"#set-environment-variables",children:"Set environment variables"}),"."]}),"\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:"Variable"}),(0,t.jsx)(n.th,{children:"Default"}),(0,t.jsx)(n.th,{children:"Description"})]})}),(0,t.jsxs)(n.tbody,{children:[(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"EMBEDDING_MODEL"})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"text-embedding-3-small"})}),(0,t.jsx)(n.td,{children:"Embedding model for generating vector embeddings for documents in the knowledge base and similarity search queries. Can be changed after the application onboarding process. Accepts one or more models."})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"LLM_MODEL"})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"gpt-4o-mini"})}),(0,t.jsxs)(n.td,{children:["Language model for language processing and text generation in the ",(0,t.jsx)(n.strong,{children:"Chat"})," feature."]})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"MODEL_PROVIDER"})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"openai"})}),(0,t.jsxs)(n.td,{children:["Model provider, as one of ",(0,t.jsx)(n.code,{children:"openai"}),", ",(0,t.jsx)(n.code,{children:"watsonx"}),", ",(0,t.jsx)(n.code,{children:"ollama"}),", or ",(0,t.jsx)(n.code,{children:"anthropic"}),"."]})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"ANTHROPIC_API_KEY"})}),(0,t.jsx)(n.td,{children:"Not set"}),(0,t.jsx)(n.td,{children:"API key for the Anthropic language model provider."})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"OPENAI_API_KEY"})}),(0,t.jsx)(n.td,{children:"Not set"}),(0,t.jsx)(n.td,{children:"API key for the OpenAI model provider, which is also the default model provider."})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"OLLAMA_ENDPOINT"})}),(0,t.jsx)(n.td,{children:"Not set"}),(0,t.jsx)(n.td,{children:"Custom provider endpoint for the Ollama model provider."})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"WATSONX_API_KEY"})}),(0,t.jsx)(n.td,{children:"Not set"}),(0,t.jsx)(n.td,{children:"API key for the IBM watsonx.ai model provider."})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"WATSONX_ENDPOINT"})}),(0,t.jsx)(n.td,{children:"Not set"}),(0,t.jsx)(n.td,{children:"Custom provider endpoint for the IBM watsonx.ai model provider."})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"WATSONX_PROJECT_ID"})}),(0,t.jsx)(n.td,{children:"Not set"}),(0,t.jsx)(n.td,{children:"Project ID for the IBM watsonx.ai model provider."})]})]})]}),"\n",(0,t.jsx)(n.h2,{id:"document-processing-settings",children:"Document processing settings"}),"\n",(0,t.jsxs)(n.p,{children:["Control how OpenRAG ",(0,t.jsx)(n.a,{href:"/ingestion",children:"processes and ingests documents"})," into your knowledge base."]}),"\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:"Variable"}),(0,t.jsx)(n.th,{children:"Default"}),(0,t.jsx)(n.th,{children:"Description"})]})}),(0,t.jsxs)(n.tbody,{children:[(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"CHUNK_OVERLAP"})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"200"})}),(0,t.jsx)(n.td,{children:"Overlap between chunks."})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"CHUNK_SIZE"})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"1000"})}),(0,t.jsx)(n.td,{children:"Text chunk size for document processing."})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"DISABLE_INGEST_WITH_LANGFLOW"})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"false"})}),(0,t.jsx)(n.td,{children:"Disable Langflow ingestion pipeline."})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"DOCLING_OCR_ENGINE"})}),(0,t.jsx)(n.td,{children:"Set by OS"}),(0,t.jsxs)(n.td,{children:["OCR engine for document processing. For macOS, ",(0,t.jsx)(n.code,{children:"ocrmac"}),". For any other OS, ",(0,t.jsx)(n.code,{children:"easyocr"}),"."]})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"OCR_ENABLED"})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"false"})}),(0,t.jsx)(n.td,{children:"Enable OCR for image processing."})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"OPENRAG_DOCUMENTS_PATHS"})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"~/.openrag/documents"})}),(0,t.jsx)(n.td,{children:"Document paths for ingestion."})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"PICTURE_DESCRIPTIONS_ENABLED"})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"false"})}),(0,t.jsx)(n.td,{children:"Enable picture descriptions."})]})]})]}),"\n",(0,t.jsx)(n.h2,{id:"langflow-settings",children:"Langflow settings"}),"\n",(0,t.jsx)(n.p,{children:"Configure the OpenRAG Langflow server's authentication, contact point, and built-in flow definitions."}),"\n",(0,t.jsxs)(n.admonition,{type:"info",children:[(0,t.jsxs)(n.p,{children:["The ",(0,t.jsx)(n.code,{children:"LANGFLOW_SUPERUSER_PASSWORD"})," is set in your ",(0,t.jsx)(n.code,{children:".env"})," file, and this value determines the default values for several other Langflow authentication variables."]}),(0,t.jsxs)(n.p,{children:["If the ",(0,t.jsx)(n.code,{children:"LANGFLOW_SUPERUSER_PASSWORD"})," variable isn't set, then the Langflow server starts ",(0,t.jsx)(n.em,{children:"without"})," authentication enabled."]}),(0,t.jsxs)(n.p,{children:["For better security, it is recommended to set ",(0,t.jsx)(n.code,{children:"LANGFLOW_SUPERUSER_PASSWORD"})," so the ",(0,t.jsx)(n.a,{href:"https://docs.langflow.org/api-keys-and-authentication#start-a-langflow-server-with-authentication-enabled",children:"Langflow server starts with authentication enabled"}),"."]})]}),"\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:"Variable"}),(0,t.jsx)(n.th,{children:"Default"}),(0,t.jsx)(n.th,{children:"Description"})]})}),(0,t.jsxs)(n.tbody,{children:[(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"LANGFLOW_AUTO_LOGIN"})}),(0,t.jsxs)(n.td,{children:["Determined by ",(0,t.jsx)(n.code,{children:"LANGFLOW_SUPERUSER_PASSWORD"})]}),(0,t.jsxs)(n.td,{children:["Whether to enable ",(0,t.jsx)(n.a,{href:"https://docs.langflow.org/api-keys-and-authentication#langflow-auto-login",children:"auto-login mode"})," for the Langflow visual editor and CLI. If ",(0,t.jsx)(n.code,{children:"LANGFLOW_SUPERUSER_PASSWORD"})," isn't set, then ",(0,t.jsx)(n.code,{children:"LANGFLOW_AUTO_LOGIN"})," is ",(0,t.jsx)(n.code,{children:"True"})," and auto-login mode is enabled. If ",(0,t.jsx)(n.code,{children:"LANGFLOW_SUPERUSER_PASSWORD"})," is set, then ",(0,t.jsx)(n.code,{children:"LANGFLOW_AUTO_LOGIN"})," is ",(0,t.jsx)(n.code,{children:"False"})," and auto-login mode is disabled. Langflow API calls always require authentication with a Langflow API key regardless of the auto-login setting."]})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"LANGFLOW_ENABLE_SUPERUSER_CLI"})}),(0,t.jsxs)(n.td,{children:["Determined by ",(0,t.jsx)(n.code,{children:"LANGFLOW_SUPERUSER_PASSWORD"})]}),(0,t.jsxs)(n.td,{children:["Whether to enable the ",(0,t.jsxs)(n.a,{href:"https://docs.langflow.org/api-keys-and-authentication#langflow-enable-superuser-cli",children:["Langflow CLI ",(0,t.jsx)(n.code,{children:"langflow superuser"})," command"]}),". If ",(0,t.jsx)(n.code,{children:"LANGFLOW_SUPERUSER_PASSWORD"})," isn't set, then ",(0,t.jsx)(n.code,{children:"LANGFLOW_ENABLE_SUPERUSER_CLI"})," is ",(0,t.jsx)(n.code,{children:"True"})," and superuser accounts can be created with the Langflow CLI. If ",(0,t.jsx)(n.code,{children:"LANGFLOW_SUPERUSER_PASSWORD"})," is set, then ",(0,t.jsx)(n.code,{children:"LANGFLOW_ENABLE_SUPERUSER_CLI"})," is ",(0,t.jsx)(n.code,{children:"False"})," and the ",(0,t.jsx)(n.code,{children:"langflow superuser"})," command is disabled."]})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"LANGFLOW_NEW_USER_IS_ACTIVE"})}),(0,t.jsxs)(n.td,{children:["Determined by ",(0,t.jsx)(n.code,{children:"LANGFLOW_SUPERUSER_PASSWORD"})]}),(0,t.jsxs)(n.td,{children:["Whether new ",(0,t.jsx)(n.a,{href:"https://docs.langflow.org/api-keys-and-authentication#langflow-new-user-is-active",children:"Langflow user accounts are active by default"}),". If ",(0,t.jsx)(n.code,{children:"LANGFLOW_SUPERUSER_PASSWORD"})," isn't set, then ",(0,t.jsx)(n.code,{children:"LANGFLOW_NEW_USER_IS_ACTIVE"})," is ",(0,t.jsx)(n.code,{children:"True"})," and new user accounts are active by default. If ",(0,t.jsx)(n.code,{children:"LANGFLOW_SUPERUSER_PASSWORD"})," is set, then ",(0,t.jsx)(n.code,{children:"LANGFLOW_NEW_USER_IS_ACTIVE"})," is ",(0,t.jsx)(n.code,{children:"False"})," and new user accounts are inactive by default."]})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"LANGFLOW_PUBLIC_URL"})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"http://localhost:7860"})}),(0,t.jsx)(n.td,{children:"Public URL for the Langflow instance. Forms the base URL for Langflow API calls and other interfaces with your OpenRAG Langflow instance."})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"LANGFLOW_KEY"})}),(0,t.jsx)(n.td,{children:"Automatically generated"}),(0,t.jsx)(n.td,{children:"A Langflow API key to run flows with Langflow API calls. Because Langflow API keys are server-specific, allow OpenRAG to generate this key initially. You can create additional Langflow API keys after deploying OpenRAG."})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"LANGFLOW_SECRET_KEY"})}),(0,t.jsx)(n.td,{children:"Automatically generated"}),(0,t.jsxs)(n.td,{children:["Secret encryption key for Langflow internal 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"})," for this variable. If this variable isn't set, then Langflow generates a secret key automatically."]})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"LANGFLOW_SUPERUSER"})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"admin"})}),(0,t.jsx)(n.td,{children:"Username for the Langflow administrator user."})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"LANGFLOW_SUPERUSER_PASSWORD"})}),(0,t.jsx)(n.td,{children:"Not set"}),(0,t.jsxs)(n.td,{children:["Langflow administrator password. If this variable isn't set, then the Langflow server starts ",(0,t.jsx)(n.em,{children:"without"})," authentication enabled. It is recommended to set ",(0,t.jsx)(n.code,{children:"LANGFLOW_SUPERUSER_PASSWORD"})," so the ",(0,t.jsx)(n.a,{href:"https://docs.langflow.org/api-keys-and-authentication#start-a-langflow-server-with-authentication-enabled",children:"Langflow server starts with authentication enabled"}),"."]})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"LANGFLOW_URL"})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"http://localhost:7860"})}),(0,t.jsx)(n.td,{children:"URL for the Langflow instance."})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsxs)(n.td,{children:[(0,t.jsx)(n.code,{children:"LANGFLOW_CHAT_FLOW_ID"}),", ",(0,t.jsx)(n.code,{children:"LANGFLOW_INGEST_FLOW_ID"}),", ",(0,t.jsx)(n.code,{children:"NUDGES_FLOW_ID"})]}),(0,t.jsx)(n.td,{children:"Built-in flow IDs"}),(0,t.jsxs)(n.td,{children:["These variables are set automatically to the IDs of the chat, ingestion, and nudges ",(0,t.jsx)(n.a,{href:"/agents",children:"flows"}),". The default values are found in ",(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"})}),". Only change these values if you want to replace a built-in flow with your own custom flow. The flow JSON must be present in your version of the OpenRAG codebase. For example, if you ",(0,t.jsx)(n.a,{href:"/docker",children:"deploy self-managed services"}),", you can add the flow JSON to your local clone of the OpenRAG repository before deploying OpenRAG."]})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"SYSTEM_PROMPT"})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"You are a helpful AI assistant with access to a knowledge base. Answer questions based on the provided context."})}),(0,t.jsxs)(n.td,{children:["System prompt instructions for the agent driving the ",(0,t.jsx)(n.strong,{children:"Chat"})," flow."]})]})]})]}),"\n",(0,t.jsx)(n.h2,{id:"oauth-provider-settings",children:"OAuth provider settings"}),"\n",(0,t.jsxs)(n.p,{children:["Configure ",(0,t.jsx)(n.a,{href:"/ingestion#oauth-ingestion",children:"OAuth providers"})," and external service integrations."]}),"\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:"Variable"}),(0,t.jsx)(n.th,{children:"Default"}),(0,t.jsx)(n.th,{children:"Description"})]})}),(0,t.jsxs)(n.tbody,{children:[(0,t.jsxs)(n.tr,{children:[(0,t.jsxs)(n.td,{children:[(0,t.jsx)(n.code,{children:"AWS_ACCESS_KEY_ID"}),(0,t.jsx)("br",{}),(0,t.jsx)(n.code,{children:"AWS_SECRET_ACCESS_KEY"})]}),(0,t.jsx)(n.td,{children:"Not set"}),(0,t.jsxs)(n.td,{children:["Enable access to AWS S3 with an ",(0,t.jsx)(n.a,{href:"https://docs.aws.amazon.com/singlesignon/latest/userguide/manage-your-applications.html",children:"AWS OAuth app"})," integration."]})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsxs)(n.td,{children:[(0,t.jsx)(n.code,{children:"GOOGLE_OAUTH_CLIENT_ID"}),(0,t.jsx)("br",{}),(0,t.jsx)(n.code,{children:"GOOGLE_OAUTH_CLIENT_SECRET"})]}),(0,t.jsx)(n.td,{children:"Not set"}),(0,t.jsxs)(n.td,{children:["Enable the ",(0,t.jsx)(n.a,{href:"https://developers.google.com/identity/protocols/oauth2",children:"Google OAuth client"})," integration. You can generate these values in the ",(0,t.jsx)(n.a,{href:"https://console.cloud.google.com/apis/credentials",children:"Google Cloud Console"}),"."]})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsxs)(n.td,{children:[(0,t.jsx)(n.code,{children:"MICROSOFT_GRAPH_OAUTH_CLIENT_ID"}),(0,t.jsx)("br",{}),(0,t.jsx)(n.code,{children:"MICROSOFT_GRAPH_OAUTH_CLIENT_SECRET"})]}),(0,t.jsx)(n.td,{children:"Not set"}),(0,t.jsxs)(n.td,{children:["Enable 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"})," integration by providing ",(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"}),"."]})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"WEBHOOK_BASE_URL"})}),(0,t.jsx)(n.td,{children:"Not set"}),(0,t.jsx)(n.td,{children:"Base URL for OAuth connector webhook endpoints. If this variable isn't set, a default base URL is used."})]})]})]}),"\n",(0,t.jsx)(n.h2,{id:"opensearch-settings",children:"OpenSearch settings"}),"\n",(0,t.jsx)(n.p,{children:"Configure OpenSearch database authentication."}),"\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:"Variable"}),(0,t.jsx)(n.th,{children:"Default"}),(0,t.jsx)(n.th,{children:"Description"})]})}),(0,t.jsxs)(n.tbody,{children:[(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"OPENSEARCH_HOST"})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"localhost"})}),(0,t.jsx)(n.td,{children:"OpenSearch instance host."})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"OPENSEARCH_PORT"})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"9200"})}),(0,t.jsx)(n.td,{children:"OpenSearch instance port."})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"OPENSEARCH_USERNAME"})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"admin"})}),(0,t.jsx)(n.td,{children:"OpenSearch administrator username."})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"OPENSEARCH_PASSWORD"})}),(0,t.jsx)(n.td,{children:"Must be set at start up"}),(0,t.jsxs)(n.td,{children:["Required. OpenSearch administrator password. 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"}),". You must set this directly in the ",(0,t.jsx)(n.code,{children:".env"})," or in the TUI's ",(0,t.jsx)(n.a,{href:"/install#setup",children:(0,t.jsx)(n.strong,{children:"Basic/Advanced Setup"})}),"."]})]})]})]}),"\n",(0,t.jsx)(n.h2,{id:"system-settings",children:"System settings"}),"\n",(0,t.jsx)(n.p,{children:"Configure general system components, session management, and logging."}),"\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:"Variable"}),(0,t.jsx)(n.th,{children:"Default"}),(0,t.jsx)(n.th,{children:"Description"})]})}),(0,t.jsxs)(n.tbody,{children:[(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"LANGFLOW_KEY_RETRIES"})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"15"})}),(0,t.jsx)(n.td,{children:"Number of retries for Langflow key generation."})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"LANGFLOW_KEY_RETRY_DELAY"})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"2.0"})}),(0,t.jsx)(n.td,{children:"Delay between retries in seconds."})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"LANGFLOW_VERSION"})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"OPENRAG_VERSION"})}),(0,t.jsxs)(n.td,{children:["Langflow Docker image version. By default, OpenRAG uses the ",(0,t.jsx)(n.code,{children:"OPENRAG_VERSION"})," for the Langflow Docker image version."]})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"LOG_FORMAT"})}),(0,t.jsx)(n.td,{children:"Not set"}),(0,t.jsxs)(n.td,{children:["Set to ",(0,t.jsx)(n.code,{children:"json"})," to enabled JSON-formatted log output. If this variable isn't set, then the default logging format is used."]})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"LOG_LEVEL"})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"INFO"})}),(0,t.jsxs)(n.td,{children:["Logging level. Can be one of ",(0,t.jsx)(n.code,{children:"DEBUG"}),", ",(0,t.jsx)(n.code,{children:"INFO"}),", ",(0,t.jsx)(n.code,{children:"WARNING"}),", or ",(0,t.jsx)(n.code,{children:"ERROR"}),". ",(0,t.jsx)(n.code,{children:"DEBUG"})," provides the most detailed logs but can impact performance."]})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"MAX_WORKERS"})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"1"})}),(0,t.jsx)(n.td,{children:"Maximum number of workers for document processing."})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"OPENRAG_VERSION"})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"latest"})}),(0,t.jsxs)(n.td,{children:["The version of the OpenRAG Docker images to run. For more information, see ",(0,t.jsx)(n.a,{href:"/upgrade",children:"Upgrade OpenRAG"})]})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"SERVICE_NAME"})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"openrag"})}),(0,t.jsx)(n.td,{children:"Service name for logging."})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"SESSION_SECRET"})}),(0,t.jsx)(n.td,{children:"Automatically generated"}),(0,t.jsx)(n.td,{children:"Session management."})]})]})]})]})}function h(e={}){const{wrapper:n}={...(0,i.R)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(a,{...e})}):a(e)}}}]); \ No newline at end of file diff --git a/assets/js/c8078f0a.75fa4391.js b/assets/js/c8078f0a.75fa4391.js new file mode 100644 index 00000000..56b21869 --- /dev/null +++ b/assets/js/c8078f0a.75fa4391.js @@ -0,0 +1 @@ +"use strict";(globalThis.webpackChunkopenrag_docs=globalThis.webpackChunkopenrag_docs||[]).push([[9026],{1381:(e,n,s)=>{s.d(n,{Ay:()=>l,RM:()=>i});var r=s(4848),t=s(8453);const i=[];function d(e){const n={code:"code",pre:"pre",...(0,t.R)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",metastring:'title="Docker"',children:"docker compose up -d\n"})}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",metastring:'title="Podman"',children:"podman compose up -d\n"})})]})}function l(e={}){const{wrapper:n}={...(0,t.R)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(d,{...e})}):d(e)}},8453:(e,n,s)=>{s.d(n,{R:()=>d,x:()=>l});var r=s(6540);const t={},i=r.createContext(t);function d(e){const n=r.useContext(i);return r.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(t):e.components||t:d(e.components),r.createElement(i.Provider,{value:n},e.children)}},9196:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>c,contentTitle:()=>l,default:()=>h,frontMatter:()=>d,metadata:()=>r,toc:()=>o});const r=JSON.parse('{"id":"reference/configuration","title":"Environment variables","description":"OpenRAG\'s .env file is the primary configuration file for OpenRAG.","source":"@site/docs/reference/configuration.mdx","sourceDirName":"reference","slug":"/reference/configuration","permalink":"/reference/configuration","draft":false,"unlisted":false,"editUrl":"https://github.com/openrag/openrag/tree/main/docs/docs/reference/configuration.mdx","tags":[],"version":"current","frontMatter":{"title":"Environment variables","slug":"/reference/configuration"},"sidebar":"tutorialSidebar","previous":{"title":"Chat","permalink":"/chat"},"next":{"title":"Contribute to OpenRAG","permalink":"/support/contribute"}}');var t=s(4848),i=s(8453);s(1381);const d={title:"Environment variables",slug:"/reference/configuration"},l=void 0,c={},o=[{value:"Edit the .env file",id:"set-environment-variables",level:2},{value:"Model provider settings",id:"model-provider-settings",level:2},{value:"Document processing settings",id:"document-processing-settings",level:2},{value:"Langflow settings",id:"langflow-settings",level:2},{value:"OAuth provider settings",id:"oauth-provider-settings",level:2},{value:"OpenSearch settings",id:"opensearch-settings",level:2},{value:"System settings",id:"system-settings",level:2}];function a(e){const n={a:"a",admonition:"admonition",code:"code",em:"em",h2:"h2",li:"li",p:"p",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,i.R)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsxs)(n.p,{children:["OpenRAG's ",(0,t.jsx)(n.code,{children:".env"})," file is the primary configuration file for OpenRAG.\nEnvironment variables in ",(0,t.jsx)(n.code,{children:".env"})," always take precedence over other sources."]}),"\n",(0,t.jsxs)(n.p,{children:["For deployments managed with the Terminal User Interface (TUI), this file is located at ",(0,t.jsx)(n.code,{children:"~/.openrag/tui"}),", and it can be created automatically during ",(0,t.jsx)(n.a,{href:"/install-options",children:"installation"}),"."]}),"\n",(0,t.jsxs)(n.p,{children:["For ",(0,t.jsx)(n.a,{href:"/docker",children:"self-managed deployments"}),", this file can be located at the root of your OpenRAG project directory or referenced from another location."]}),"\n",(0,t.jsxs)(n.p,{children:["For an example, see ",(0,t.jsxs)(n.a,{href:"https://github.com/langflow-ai/openrag/blob/main/.env.example",children:[(0,t.jsx)(n.code,{children:".env.example"})," in the OpenRAG repository"]}),"."]}),"\n",(0,t.jsx)(n.admonition,{type:"tip",children:(0,t.jsxs)(n.p,{children:["OpenRAG's Docker Compose files are populated automatically using values from the ",(0,t.jsx)(n.code,{children:".env"})," file, so you don't need to edit the Docker Compose files manually."]})}),"\n",(0,t.jsxs)(n.p,{children:["If a variable isn't set, OpenRAG uses default or fallback values where available.\nNot all variables have default values, and errors can occur if required variables aren't set.\nDefault values can be found in the reference tables on this page and in ",(0,t.jsx)(n.a,{href:"https://github.com/langflow-ai/openrag/blob/main/src/config/config_manager.py",children:(0,t.jsx)(n.code,{children:"config_manager.py"})}),", ",(0,t.jsx)(n.a,{href:"https://github.com/langflow-ai/openrag/blob/main/src/config/settings.py",children:(0,t.jsx)(n.code,{children:"settings.py"})}),", and ",(0,t.jsx)(n.a,{href:"https://github.com/langflow-ai/openrag/blob/main/src/utils/logging_config.py",children:(0,t.jsx)(n.code,{children:"logging_config.py"})}),"."]}),"\n",(0,t.jsxs)(n.p,{children:["You can ",(0,t.jsx)(n.a,{href:"/agents#modify-a-flow-at-runtime",children:"temporarily set Langflow variables at runtime"}),".\nHowever, these temporary overrides don't overlap with most OpenRAG environment variables.\nThe only exceptions are flow-level Langflow settings, such as the language model used in a flow."]}),"\n",(0,t.jsxs)(n.h2,{id:"set-environment-variables",children:["Edit the ",(0,t.jsx)(n.code,{children:".env"})," file"]}),"\n",(0,t.jsxs)(n.p,{children:["During ",(0,t.jsx)(n.a,{href:"/install-options",children:"installation"}),", an initial ",(0,t.jsx)(n.code,{children:".env"})," file is created automatically or manually.\nYou can edit this file to change OpenRAG configuration settings after installation."]}),"\n",(0,t.jsxs)(n.p,{children:["Each OpenRAG environment variable is either mutable or immutable.\nThis determines the actions you must take to apply changes after editing the ",(0,t.jsx)(n.code,{children:".env"})," file:"]}),"\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.strong,{children:"Mutable environment variables"}),": You can apply changes to mutable environment variables by ",(0,t.jsx)(n.a,{href:"/manage-services",children:"stopping and restarting the OpenRAG services"})," after editing the ",(0,t.jsx)(n.code,{children:".env"})," file."]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.strong,{children:"Immutable environment variables"}),": You must ",(0,t.jsx)(n.a,{href:"/reinstall",children:"redeploy OpenRAG"})," with your modified ",(0,t.jsx)(n.code,{children:".env"})," file if you change immutable environment variables."]}),"\n"]}),"\n"]}),"\n",(0,t.jsx)(n.h2,{id:"model-provider-settings",children:"Model provider settings"}),"\n",(0,t.jsx)(n.p,{children:"Configure which models and providers OpenRAG uses to generate text and embeddings.\nYou only need to provide credentials for the providers you are using in OpenRAG."}),"\n",(0,t.jsxs)(n.p,{children:["These variables are initially set during the ",(0,t.jsx)(n.a,{href:"/install#application-onboarding",children:"application onboarding process"}),".\nSome of these variables are immutable and can only be changed by redeploying OpenRAG, as explained in ",(0,t.jsx)(n.a,{href:"#set-environment-variables",children:"Set environment variables"}),"."]}),"\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:"Variable"}),(0,t.jsx)(n.th,{children:"Default"}),(0,t.jsx)(n.th,{children:"Description"})]})}),(0,t.jsxs)(n.tbody,{children:[(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"EMBEDDING_MODEL"})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"text-embedding-3-small"})}),(0,t.jsx)(n.td,{children:"Embedding model for generating vector embeddings for documents in the knowledge base and similarity search queries. Can be changed after the application onboarding process. Accepts one or more models."})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"LLM_MODEL"})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"gpt-4o-mini"})}),(0,t.jsxs)(n.td,{children:["Language model for language processing and text generation in the ",(0,t.jsx)(n.strong,{children:"Chat"})," feature."]})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"MODEL_PROVIDER"})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"openai"})}),(0,t.jsxs)(n.td,{children:["Model provider, as one of ",(0,t.jsx)(n.code,{children:"openai"}),", ",(0,t.jsx)(n.code,{children:"watsonx"}),", ",(0,t.jsx)(n.code,{children:"ollama"}),", or ",(0,t.jsx)(n.code,{children:"anthropic"}),"."]})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"ANTHROPIC_API_KEY"})}),(0,t.jsx)(n.td,{children:"Not set"}),(0,t.jsx)(n.td,{children:"API key for the Anthropic language model provider."})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"OPENAI_API_KEY"})}),(0,t.jsx)(n.td,{children:"Not set"}),(0,t.jsx)(n.td,{children:"API key for the OpenAI model provider, which is also the default model provider."})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"OLLAMA_ENDPOINT"})}),(0,t.jsx)(n.td,{children:"Not set"}),(0,t.jsx)(n.td,{children:"Custom provider endpoint for the Ollama model provider."})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"WATSONX_API_KEY"})}),(0,t.jsx)(n.td,{children:"Not set"}),(0,t.jsx)(n.td,{children:"API key for the IBM watsonx.ai model provider."})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"WATSONX_ENDPOINT"})}),(0,t.jsx)(n.td,{children:"Not set"}),(0,t.jsx)(n.td,{children:"Custom provider endpoint for the IBM watsonx.ai model provider."})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"WATSONX_PROJECT_ID"})}),(0,t.jsx)(n.td,{children:"Not set"}),(0,t.jsx)(n.td,{children:"Project ID for the IBM watsonx.ai model provider."})]})]})]}),"\n",(0,t.jsx)(n.h2,{id:"document-processing-settings",children:"Document processing settings"}),"\n",(0,t.jsxs)(n.p,{children:["Control how OpenRAG ",(0,t.jsx)(n.a,{href:"/ingestion",children:"processes and ingests documents"})," into your knowledge base."]}),"\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:"Variable"}),(0,t.jsx)(n.th,{children:"Default"}),(0,t.jsx)(n.th,{children:"Description"})]})}),(0,t.jsxs)(n.tbody,{children:[(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"CHUNK_OVERLAP"})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"200"})}),(0,t.jsx)(n.td,{children:"Overlap between chunks."})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"CHUNK_SIZE"})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"1000"})}),(0,t.jsx)(n.td,{children:"Text chunk size for document processing."})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"DISABLE_INGEST_WITH_LANGFLOW"})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"false"})}),(0,t.jsx)(n.td,{children:"Disable Langflow ingestion pipeline."})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"DOCLING_OCR_ENGINE"})}),(0,t.jsx)(n.td,{children:"Set by OS"}),(0,t.jsxs)(n.td,{children:["OCR engine for document processing. For macOS, ",(0,t.jsx)(n.code,{children:"ocrmac"}),". For any other OS, ",(0,t.jsx)(n.code,{children:"easyocr"}),"."]})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"OCR_ENABLED"})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"false"})}),(0,t.jsx)(n.td,{children:"Enable OCR for image processing."})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"OPENRAG_DOCUMENTS_PATH"})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"~/.openrag/documents"})}),(0,t.jsxs)(n.td,{children:["The ",(0,t.jsx)(n.a,{href:"/knowledge#set-the-local-documents-path",children:"local documents path"})," for ingestion."]})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"PICTURE_DESCRIPTIONS_ENABLED"})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"false"})}),(0,t.jsx)(n.td,{children:"Enable picture descriptions."})]})]})]}),"\n",(0,t.jsx)(n.h2,{id:"langflow-settings",children:"Langflow settings"}),"\n",(0,t.jsx)(n.p,{children:"Configure the OpenRAG Langflow server's authentication, contact point, and built-in flow definitions."}),"\n",(0,t.jsxs)(n.admonition,{type:"info",children:[(0,t.jsxs)(n.p,{children:["The ",(0,t.jsx)(n.code,{children:"LANGFLOW_SUPERUSER_PASSWORD"})," is set in your ",(0,t.jsx)(n.code,{children:".env"})," file, and this value determines the default values for several other Langflow authentication variables."]}),(0,t.jsxs)(n.p,{children:["If the ",(0,t.jsx)(n.code,{children:"LANGFLOW_SUPERUSER_PASSWORD"})," variable isn't set, then the Langflow server starts ",(0,t.jsx)(n.em,{children:"without"})," authentication enabled."]}),(0,t.jsxs)(n.p,{children:["For better security, it is recommended to set ",(0,t.jsx)(n.code,{children:"LANGFLOW_SUPERUSER_PASSWORD"})," so the ",(0,t.jsx)(n.a,{href:"https://docs.langflow.org/api-keys-and-authentication#start-a-langflow-server-with-authentication-enabled",children:"Langflow server starts with authentication enabled"}),"."]})]}),"\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:"Variable"}),(0,t.jsx)(n.th,{children:"Default"}),(0,t.jsx)(n.th,{children:"Description"})]})}),(0,t.jsxs)(n.tbody,{children:[(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"LANGFLOW_AUTO_LOGIN"})}),(0,t.jsxs)(n.td,{children:["Determined by ",(0,t.jsx)(n.code,{children:"LANGFLOW_SUPERUSER_PASSWORD"})]}),(0,t.jsxs)(n.td,{children:["Whether to enable ",(0,t.jsx)(n.a,{href:"https://docs.langflow.org/api-keys-and-authentication#langflow-auto-login",children:"auto-login mode"})," for the Langflow visual editor and CLI. If ",(0,t.jsx)(n.code,{children:"LANGFLOW_SUPERUSER_PASSWORD"})," isn't set, then ",(0,t.jsx)(n.code,{children:"LANGFLOW_AUTO_LOGIN"})," is ",(0,t.jsx)(n.code,{children:"True"})," and auto-login mode is enabled. If ",(0,t.jsx)(n.code,{children:"LANGFLOW_SUPERUSER_PASSWORD"})," is set, then ",(0,t.jsx)(n.code,{children:"LANGFLOW_AUTO_LOGIN"})," is ",(0,t.jsx)(n.code,{children:"False"})," and auto-login mode is disabled. Langflow API calls always require authentication with a Langflow API key regardless of the auto-login setting."]})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"LANGFLOW_ENABLE_SUPERUSER_CLI"})}),(0,t.jsxs)(n.td,{children:["Determined by ",(0,t.jsx)(n.code,{children:"LANGFLOW_SUPERUSER_PASSWORD"})]}),(0,t.jsxs)(n.td,{children:["Whether to enable the ",(0,t.jsxs)(n.a,{href:"https://docs.langflow.org/api-keys-and-authentication#langflow-enable-superuser-cli",children:["Langflow CLI ",(0,t.jsx)(n.code,{children:"langflow superuser"})," command"]}),". If ",(0,t.jsx)(n.code,{children:"LANGFLOW_SUPERUSER_PASSWORD"})," isn't set, then ",(0,t.jsx)(n.code,{children:"LANGFLOW_ENABLE_SUPERUSER_CLI"})," is ",(0,t.jsx)(n.code,{children:"True"})," and superuser accounts can be created with the Langflow CLI. If ",(0,t.jsx)(n.code,{children:"LANGFLOW_SUPERUSER_PASSWORD"})," is set, then ",(0,t.jsx)(n.code,{children:"LANGFLOW_ENABLE_SUPERUSER_CLI"})," is ",(0,t.jsx)(n.code,{children:"False"})," and the ",(0,t.jsx)(n.code,{children:"langflow superuser"})," command is disabled."]})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"LANGFLOW_NEW_USER_IS_ACTIVE"})}),(0,t.jsxs)(n.td,{children:["Determined by ",(0,t.jsx)(n.code,{children:"LANGFLOW_SUPERUSER_PASSWORD"})]}),(0,t.jsxs)(n.td,{children:["Whether new ",(0,t.jsx)(n.a,{href:"https://docs.langflow.org/api-keys-and-authentication#langflow-new-user-is-active",children:"Langflow user accounts are active by default"}),". If ",(0,t.jsx)(n.code,{children:"LANGFLOW_SUPERUSER_PASSWORD"})," isn't set, then ",(0,t.jsx)(n.code,{children:"LANGFLOW_NEW_USER_IS_ACTIVE"})," is ",(0,t.jsx)(n.code,{children:"True"})," and new user accounts are active by default. If ",(0,t.jsx)(n.code,{children:"LANGFLOW_SUPERUSER_PASSWORD"})," is set, then ",(0,t.jsx)(n.code,{children:"LANGFLOW_NEW_USER_IS_ACTIVE"})," is ",(0,t.jsx)(n.code,{children:"False"})," and new user accounts are inactive by default."]})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"LANGFLOW_PUBLIC_URL"})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"http://localhost:7860"})}),(0,t.jsx)(n.td,{children:"Public URL for the Langflow instance. Forms the base URL for Langflow API calls and other interfaces with your OpenRAG Langflow instance."})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"LANGFLOW_KEY"})}),(0,t.jsx)(n.td,{children:"Automatically generated"}),(0,t.jsx)(n.td,{children:"A Langflow API key to run flows with Langflow API calls. Because Langflow API keys are server-specific, allow OpenRAG to generate this key initially. You can create additional Langflow API keys after deploying OpenRAG."})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"LANGFLOW_SECRET_KEY"})}),(0,t.jsx)(n.td,{children:"Automatically generated"}),(0,t.jsxs)(n.td,{children:["Secret encryption key for Langflow internal 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"})," for this variable. If this variable isn't set, then Langflow generates a secret key automatically."]})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"LANGFLOW_SUPERUSER"})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"admin"})}),(0,t.jsx)(n.td,{children:"Username for the Langflow administrator user."})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"LANGFLOW_SUPERUSER_PASSWORD"})}),(0,t.jsx)(n.td,{children:"Not set"}),(0,t.jsxs)(n.td,{children:["Langflow administrator password. If this variable isn't set, then the Langflow server starts ",(0,t.jsx)(n.em,{children:"without"})," authentication enabled. It is recommended to set ",(0,t.jsx)(n.code,{children:"LANGFLOW_SUPERUSER_PASSWORD"})," so the ",(0,t.jsx)(n.a,{href:"https://docs.langflow.org/api-keys-and-authentication#start-a-langflow-server-with-authentication-enabled",children:"Langflow server starts with authentication enabled"}),"."]})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"LANGFLOW_URL"})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"http://localhost:7860"})}),(0,t.jsx)(n.td,{children:"URL for the Langflow instance."})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsxs)(n.td,{children:[(0,t.jsx)(n.code,{children:"LANGFLOW_CHAT_FLOW_ID"}),", ",(0,t.jsx)(n.code,{children:"LANGFLOW_INGEST_FLOW_ID"}),", ",(0,t.jsx)(n.code,{children:"NUDGES_FLOW_ID"})]}),(0,t.jsx)(n.td,{children:"Built-in flow IDs"}),(0,t.jsxs)(n.td,{children:["These variables are set automatically to the IDs of the chat, ingestion, and nudges ",(0,t.jsx)(n.a,{href:"/agents",children:"flows"}),". The default values are found in ",(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"})}),". Only change these values if you want to replace a built-in flow with your own custom flow. The flow JSON must be present in your version of the OpenRAG codebase. For example, if you ",(0,t.jsx)(n.a,{href:"/docker",children:"deploy self-managed services"}),", you can add the flow JSON to your local clone of the OpenRAG repository before deploying OpenRAG."]})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"SYSTEM_PROMPT"})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"You are a helpful AI assistant with access to a knowledge base. Answer questions based on the provided context."})}),(0,t.jsxs)(n.td,{children:["System prompt instructions for the agent driving the ",(0,t.jsx)(n.strong,{children:"Chat"})," flow."]})]})]})]}),"\n",(0,t.jsx)(n.h2,{id:"oauth-provider-settings",children:"OAuth provider settings"}),"\n",(0,t.jsxs)(n.p,{children:["Configure ",(0,t.jsx)(n.a,{href:"/ingestion#oauth-ingestion",children:"OAuth providers"})," and external service integrations."]}),"\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:"Variable"}),(0,t.jsx)(n.th,{children:"Default"}),(0,t.jsx)(n.th,{children:"Description"})]})}),(0,t.jsxs)(n.tbody,{children:[(0,t.jsxs)(n.tr,{children:[(0,t.jsxs)(n.td,{children:[(0,t.jsx)(n.code,{children:"AWS_ACCESS_KEY_ID"}),(0,t.jsx)("br",{}),(0,t.jsx)(n.code,{children:"AWS_SECRET_ACCESS_KEY"})]}),(0,t.jsx)(n.td,{children:"Not set"}),(0,t.jsxs)(n.td,{children:["Enable access to AWS S3 with an ",(0,t.jsx)(n.a,{href:"https://docs.aws.amazon.com/singlesignon/latest/userguide/manage-your-applications.html",children:"AWS OAuth app"})," integration."]})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsxs)(n.td,{children:[(0,t.jsx)(n.code,{children:"GOOGLE_OAUTH_CLIENT_ID"}),(0,t.jsx)("br",{}),(0,t.jsx)(n.code,{children:"GOOGLE_OAUTH_CLIENT_SECRET"})]}),(0,t.jsx)(n.td,{children:"Not set"}),(0,t.jsxs)(n.td,{children:["Enable the ",(0,t.jsx)(n.a,{href:"https://developers.google.com/identity/protocols/oauth2",children:"Google OAuth client"})," integration. You can generate these values in the ",(0,t.jsx)(n.a,{href:"https://console.cloud.google.com/apis/credentials",children:"Google Cloud Console"}),"."]})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsxs)(n.td,{children:[(0,t.jsx)(n.code,{children:"MICROSOFT_GRAPH_OAUTH_CLIENT_ID"}),(0,t.jsx)("br",{}),(0,t.jsx)(n.code,{children:"MICROSOFT_GRAPH_OAUTH_CLIENT_SECRET"})]}),(0,t.jsx)(n.td,{children:"Not set"}),(0,t.jsxs)(n.td,{children:["Enable 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"})," integration by providing ",(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"}),"."]})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"WEBHOOK_BASE_URL"})}),(0,t.jsx)(n.td,{children:"Not set"}),(0,t.jsx)(n.td,{children:"Base URL for OAuth connector webhook endpoints. If this variable isn't set, a default base URL is used."})]})]})]}),"\n",(0,t.jsx)(n.h2,{id:"opensearch-settings",children:"OpenSearch settings"}),"\n",(0,t.jsx)(n.p,{children:"Configure OpenSearch database authentication."}),"\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:"Variable"}),(0,t.jsx)(n.th,{children:"Default"}),(0,t.jsx)(n.th,{children:"Description"})]})}),(0,t.jsxs)(n.tbody,{children:[(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"OPENSEARCH_HOST"})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"localhost"})}),(0,t.jsx)(n.td,{children:"OpenSearch instance host."})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"OPENSEARCH_PORT"})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"9200"})}),(0,t.jsx)(n.td,{children:"OpenSearch instance port."})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"OPENSEARCH_USERNAME"})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"admin"})}),(0,t.jsx)(n.td,{children:"OpenSearch administrator username."})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"OPENSEARCH_PASSWORD"})}),(0,t.jsx)(n.td,{children:"Must be set at start up"}),(0,t.jsxs)(n.td,{children:["Required. OpenSearch administrator password. 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"}),". You must set this directly in the ",(0,t.jsx)(n.code,{children:".env"})," or in the TUI's ",(0,t.jsx)(n.a,{href:"/install#setup",children:(0,t.jsx)(n.strong,{children:"Basic/Advanced Setup"})}),"."]})]})]})]}),"\n",(0,t.jsx)(n.h2,{id:"system-settings",children:"System settings"}),"\n",(0,t.jsx)(n.p,{children:"Configure general system components, session management, and logging."}),"\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:"Variable"}),(0,t.jsx)(n.th,{children:"Default"}),(0,t.jsx)(n.th,{children:"Description"})]})}),(0,t.jsxs)(n.tbody,{children:[(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"LANGFLOW_KEY_RETRIES"})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"15"})}),(0,t.jsx)(n.td,{children:"Number of retries for Langflow key generation."})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"LANGFLOW_KEY_RETRY_DELAY"})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"2.0"})}),(0,t.jsx)(n.td,{children:"Delay between retries in seconds."})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"LANGFLOW_VERSION"})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"OPENRAG_VERSION"})}),(0,t.jsxs)(n.td,{children:["Langflow Docker image version. By default, OpenRAG uses the ",(0,t.jsx)(n.code,{children:"OPENRAG_VERSION"})," for the Langflow Docker image version."]})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"LOG_FORMAT"})}),(0,t.jsx)(n.td,{children:"Not set"}),(0,t.jsxs)(n.td,{children:["Set to ",(0,t.jsx)(n.code,{children:"json"})," to enabled JSON-formatted log output. If this variable isn't set, then the default logging format is used."]})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"LOG_LEVEL"})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"INFO"})}),(0,t.jsxs)(n.td,{children:["Logging level. Can be one of ",(0,t.jsx)(n.code,{children:"DEBUG"}),", ",(0,t.jsx)(n.code,{children:"INFO"}),", ",(0,t.jsx)(n.code,{children:"WARNING"}),", or ",(0,t.jsx)(n.code,{children:"ERROR"}),". ",(0,t.jsx)(n.code,{children:"DEBUG"})," provides the most detailed logs but can impact performance."]})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"MAX_WORKERS"})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"1"})}),(0,t.jsx)(n.td,{children:"Maximum number of workers for document processing."})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"OPENRAG_VERSION"})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"latest"})}),(0,t.jsxs)(n.td,{children:["The version of the OpenRAG Docker images to run. For more information, see ",(0,t.jsx)(n.a,{href:"/upgrade",children:"Upgrade OpenRAG"})]})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"SERVICE_NAME"})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"openrag"})}),(0,t.jsx)(n.td,{children:"Service name for logging."})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"SESSION_SECRET"})}),(0,t.jsx)(n.td,{children:"Automatically generated"}),(0,t.jsx)(n.td,{children:"Session management."})]})]})]})]})}function h(e={}){const{wrapper:n}={...(0,i.R)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(a,{...e})}):a(e)}}}]); \ No newline at end of file diff --git a/assets/js/d0314b07.0bb94724.js b/assets/js/d0314b07.c52456be.js similarity index 99% rename from assets/js/d0314b07.0bb94724.js rename to assets/js/d0314b07.c52456be.js index f8e5f9b2..2cad8fa1 100644 --- a/assets/js/d0314b07.0bb94724.js +++ b/assets/js/d0314b07.c52456be.js @@ -1 +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),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:"Use environment API key"})," 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"]}),"\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:["For ",(0,r.jsx)(n.strong,{children:"watsonx.ai API Endpoint"}),", select the base URL for your watsonx.ai model deployment."]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsx)(n.p,{children:"Enter your watsonx.ai deployment's project ID and API key."}),"\n",(0,r.jsxs)(n.p,{children:["You can enable ",(0,r.jsx)(n.strong,{children:"Use environment API key"})," 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"]}),"\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 the OpenRAG onboarding dialog, enter your Ollama server's base URL:"}),"\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"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsx)(n.p,{children:"Select the language model that your Ollama server is running."}),"\n",(0,r.jsx)(n.p,{children:"If your server isn't running any language models, you must either deploy a language model on your Ollama server, or use another provider for the language model."}),"\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"]}),"\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 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:"Use environment API key"})," 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"]}),"\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 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,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(!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:o})),[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}),g=(()=>{const e=c??u;return m({value:e,tabValues:o})?e:null})();(0,l.A)(()=>{g&&a(g)},[g]);return{selectedValue:i,selectValue:(0,r.useCallback)(e=>{if(!m({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 g=s(2303);const j={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var y=s(4848);function v({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,y.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,y.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",j.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,y.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=f(e);return(0,y.jsxs)("div",{className:(0,t.A)(o.G.tabs.container,"tabs-container",j.tabList),children:[(0,y.jsx)(v,{...n,...e}),(0,y.jsx)(A,{...n,...e})]})}function w(e){const n=(0,g.A)();return(0,y.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, select ",(0,r.jsx)(n.strong,{children:"Basic Setup"}),"."]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsx)(n.p,{children:"Enter administrator passwords for the OpenRAG OpenSearch and Langflow services."}),"\n",(0,r.jsx)(n.p,{children:"The OpenSearch password is required, and a secure password is automatically generated if you don't provide one manually."}),"\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",(0,r.jsxs)(n.p,{children:["You can click ",(0,r.jsx)(n.strong,{children:"Generate Password"})," to create a Langflow password and username automatically."]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["Optional: Under ",(0,r.jsx)(n.strong,{children:"API Keys"}),", enter your model provider credentials, or leave these fields empty if you want to configure model provider credentials during the application onboarding process."]}),"\n",(0,r.jsxs)(n.p,{children:["There is no material difference between providing these values now or during the ",(0,r.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,r.jsx)(n.strong,{children:"Use environment API key"})," option."]}),"\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."}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["Optional: Under ",(0,r.jsx)(n.strong,{children:"Others"}),", edit the ",(0,r.jsx)(n.a,{href:"/knowledge",children:"knowledge base"})," paths if you don't want to use the default paths:"]}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"Documents Paths"}),": One or more paths to directories are where OpenRAG looks for documents to ingest."]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"OpenSearch Data PAth"}),": Specify the path where you want OpenRAG to create your OpenSearch index."]}),"\n"]}),"\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 keys, 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 OpenRAG"})," to start the OpenRAG services."]}),"\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:["Click ",(0,r.jsx)(n.strong,{children:"Close"}),", and then click ",(0,r.jsx)(n.strong,{children:"Launch OpenRAG"})," or navigate to ",(0,r.jsx)(n.code,{children:"localhost:3000"})," in your browser."]}),"\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, select ",(0,r.jsx)(n.strong,{children:"Advanced Setup"}),"."]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsx)(n.p,{children:"Enter administrator passwords for the OpenRAG OpenSearch and Langflow services."}),"\n",(0,r.jsx)(n.p,{children:"The OpenSearch password is required, and a secure password is automatically generated if you don't provide one manually."}),"\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",(0,r.jsxs)(n.p,{children:["You can click ",(0,r.jsx)(n.strong,{children:"Generate Password"})," to create a Langflow password and username automatically."]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["Optional: Under ",(0,r.jsx)(n.strong,{children:"API Keys"}),", enter your model provider credentials, or leave the ",(0,r.jsx)(n.strong,{children:"OpenAI"}),", ",(0,r.jsx)(n.strong,{children:"Anthropic"}),", ",(0,r.jsx)(n.strong,{children:"Ollama"}),", and ",(0,r.jsx)(n.strong,{children:"IBM watsonx.ai"})," fields empty if you want to configure model provider credentials during the application onboarding process."]}),"\n",(0,r.jsxs)(n.p,{children:["There is no material difference between providing these values now or during the ",(0,r.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,r.jsx)(n.strong,{children:"Use environment API key"})," option."]}),"\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."}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["Recommended: To upload documents from external storage, such as Google Drive, add the required OAuth credentials for the connectors that you want to use under ",(0,r.jsx)(n.strong,{children:"API Keys"}),". 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:"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",(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"]}),"\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:"Register the redirect URIs shown in the TUI in your OAuth provider.\nThese are the URLs your OAuth provider will use to redirect users back to OpenRAG after they sign in."}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["Optional: Under ",(0,r.jsx)(n.strong,{children:"Others"}),", you can edit the following settings if needed:"]}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"Documents Paths"}),": Use the default path or provide one or more paths to directories are where OpenRAG looks for documents to ingest in to your ",(0,r.jsx)(n.a,{href:"/knowledge",children:"knowledge base"}),"."]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"OpenSearch Data Path"}),": Specify the path where you want OpenRAG to create your OpenSearch index."]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsxs)(n.strong,{children:["Langflow Public URL (",(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.jsxs)(n.strong,{children:["Webhook Base URL (",(0,r.jsx)(n.code,{children:"WEBHOOK_BASE_URL"}),")"]}),": If applicable, set the base address for your OAuth connector endpoints. If set, the OAuth connector webhook URLs are constructed as ",(0,r.jsx)(n.code,{children:"WEBHOOK_BASE_URL/connectors/${provider}/webhook"}),"."]}),"\n"]}),"\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 OpenRAG"})," to start the OpenRAG services."]}),"\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:["Click ",(0,r.jsx)(n.strong,{children:"Close"}),", and then click ",(0,r.jsx)(n.strong,{children:"Launch OpenRAG"})," or navigate to ",(0,r.jsx)(n.code,{children:"localhost:3000"})," in your browser."]}),"\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.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)}},3929:(e,n,s)=>{s.d(n,{A:()=>r});const r=s.p+"assets/images/openrag_tui_dec_2025-c7022e66cc6675f25aced7b8acd8274d.png"},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)}},4398:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>m,contentTitle:()=>p,default:()=>g,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),o=s(8453),i=(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,...i.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,o.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",(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(3929).A+"",width:"653",height:"397"})}),"\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"]}),"\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.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)(i.Ay,{}),"\n",(0,t.jsx)(h.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)}},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)}},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 +"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),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:"Use environment API key"})," 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"]}),"\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:["For ",(0,r.jsx)(n.strong,{children:"watsonx.ai API Endpoint"}),", select the base URL for your watsonx.ai model deployment."]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsx)(n.p,{children:"Enter your watsonx.ai deployment's project ID and API key."}),"\n",(0,r.jsxs)(n.p,{children:["You can enable ",(0,r.jsx)(n.strong,{children:"Use environment API key"})," 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"]}),"\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 the OpenRAG onboarding dialog, enter your Ollama server's base URL:"}),"\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"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsx)(n.p,{children:"Select the language model that your Ollama server is running."}),"\n",(0,r.jsx)(n.p,{children:"If your server isn't running any language models, you must either deploy a language model on your Ollama server, or use another provider for the language model."}),"\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"]}),"\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 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:"Use environment API key"})," 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"]}),"\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 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,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(!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:o})),[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}),g=(()=>{const e=c??u;return m({value:e,tabValues:o})?e:null})();(0,l.A)(()=>{g&&a(g)},[g]);return{selectedValue:i,selectValue:(0,r.useCallback)(e=>{if(!m({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 g=s(2303);const j={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var y=s(4848);function v({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,y.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,y.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",j.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,y.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=f(e);return(0,y.jsxs)("div",{className:(0,t.A)(o.G.tabs.container,"tabs-container",j.tabList),children:[(0,y.jsx)(v,{...n,...e}),(0,y.jsx)(A,{...n,...e})]})}function w(e){const n=(0,g.A)();return(0,y.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, select ",(0,r.jsx)(n.strong,{children:"Basic Setup"}),"."]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsx)(n.p,{children:"Enter administrator passwords for the OpenRAG OpenSearch and Langflow services."}),"\n",(0,r.jsx)(n.p,{children:"The OpenSearch password is required, and a secure password is automatically generated if you don't provide one manually."}),"\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",(0,r.jsxs)(n.p,{children:["You can click ",(0,r.jsx)(n.strong,{children:"Generate Password"})," to create a Langflow password and username automatically."]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["Optional: Under ",(0,r.jsx)(n.strong,{children:"API Keys"}),", enter your model provider credentials, or leave these fields empty if you want to configure model provider credentials during the application onboarding process."]}),"\n",(0,r.jsxs)(n.p,{children:["There is no material difference between providing these values now or during the ",(0,r.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,r.jsx)(n.strong,{children:"Use environment API key"})," option."]}),"\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."}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["Optional: Under ",(0,r.jsx)(n.strong,{children:"Others"}),", edit the ",(0,r.jsx)(n.a,{href:"/knowledge",children:"knowledge base"})," paths if you don't want to use the default paths:"]}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"Documents Paths"}),": One or more paths to directories are where OpenRAG looks for documents to ingest."]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"OpenSearch Data Path"}),": Specify the path where you want OpenRAG to create your OpenSearch index."]}),"\n"]}),"\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 keys, 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 OpenRAG"})," to start the OpenRAG services."]}),"\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:["Click ",(0,r.jsx)(n.strong,{children:"Close"}),", and then click ",(0,r.jsx)(n.strong,{children:"Launch OpenRAG"})," or navigate to ",(0,r.jsx)(n.code,{children:"localhost:3000"})," in your browser."]}),"\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, select ",(0,r.jsx)(n.strong,{children:"Advanced Setup"}),"."]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsx)(n.p,{children:"Enter administrator passwords for the OpenRAG OpenSearch and Langflow services."}),"\n",(0,r.jsx)(n.p,{children:"The OpenSearch password is required, and a secure password is automatically generated if you don't provide one manually."}),"\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",(0,r.jsxs)(n.p,{children:["You can click ",(0,r.jsx)(n.strong,{children:"Generate Password"})," to create a Langflow password and username automatically."]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["Optional: Under ",(0,r.jsx)(n.strong,{children:"API Keys"}),", enter your model provider credentials, or leave the ",(0,r.jsx)(n.strong,{children:"OpenAI"}),", ",(0,r.jsx)(n.strong,{children:"Anthropic"}),", ",(0,r.jsx)(n.strong,{children:"Ollama"}),", and ",(0,r.jsx)(n.strong,{children:"IBM watsonx.ai"})," fields empty if you want to configure model provider credentials during the application onboarding process."]}),"\n",(0,r.jsxs)(n.p,{children:["There is no material difference between providing these values now or during the ",(0,r.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,r.jsx)(n.strong,{children:"Use environment API key"})," option."]}),"\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."}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["Recommended: To upload documents from external storage, such as Google Drive, add the required OAuth credentials for the connectors that you want to use under ",(0,r.jsx)(n.strong,{children:"API Keys"}),". 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:"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",(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"]}),"\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:"Register the redirect URIs shown in the TUI in your OAuth provider.\nThese are the URLs your OAuth provider will use to redirect users back to OpenRAG after they sign in."}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["Optional: Under ",(0,r.jsx)(n.strong,{children:"Others"}),", you can edit the following settings if needed:"]}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"Documents Paths"}),": Use the default path or provide one or more paths to directories are where OpenRAG looks for documents to ingest in to your ",(0,r.jsx)(n.a,{href:"/knowledge",children:"knowledge base"}),"."]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"OpenSearch Data Path"}),": Specify the path where you want OpenRAG to create your OpenSearch index."]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsxs)(n.strong,{children:["Langflow Public URL (",(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.jsxs)(n.strong,{children:["Webhook Base URL (",(0,r.jsx)(n.code,{children:"WEBHOOK_BASE_URL"}),")"]}),": If applicable, set the base address for your OAuth connector endpoints. If set, the OAuth connector webhook URLs are constructed as ",(0,r.jsx)(n.code,{children:"WEBHOOK_BASE_URL/connectors/${provider}/webhook"}),"."]}),"\n"]}),"\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 OpenRAG"})," to start the OpenRAG services."]}),"\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:["Click ",(0,r.jsx)(n.strong,{children:"Close"}),", and then click ",(0,r.jsx)(n.strong,{children:"Launch OpenRAG"})," or navigate to ",(0,r.jsx)(n.code,{children:"localhost:3000"})," in your browser."]}),"\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.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)}},3929:(e,n,s)=>{s.d(n,{A:()=>r});const r=s.p+"assets/images/openrag_tui_dec_2025-c7022e66cc6675f25aced7b8acd8274d.png"},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)}},4398:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>m,contentTitle:()=>p,default:()=>g,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),o=s(8453),i=(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,...i.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,o.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",(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(3929).A+"",width:"653",height:"397"})}),"\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"]}),"\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.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)(i.Ay,{}),"\n",(0,t.jsx)(h.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)}},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)}},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/runtime~main.03e752b6.js b/assets/js/runtime~main.8df7d349.js similarity index 62% rename from assets/js/runtime~main.03e752b6.js rename to assets/js/runtime~main.8df7d349.js index b95ea9af..e87d4ee9 100644 --- a/assets/js/runtime~main.03e752b6.js +++ b/assets/js/runtime~main.8df7d349.js @@ -1 +1 @@ -(()=>{"use strict";var e,a,r,t,f,d={},c={};function o(e){var a=c[e];if(void 0!==a)return a.exports;var r=c[e]={exports:{}};return d[e].call(r.exports,r,r.exports,o),r.exports}o.m=d,e=[],o.O=(a,r,t,f)=>{if(!r){var d=1/0;for(i=0;i=f)&&Object.keys(o.O).every(e=>o.O[e](r[b]))?r.splice(b--,1):(c=!1,f0&&e[i-1][2]>f;i--)e[i]=e[i-1];e[i]=[r,t,f]},o.n=e=>{var a=e&&e.__esModule?()=>e.default:()=>e;return o.d(a,{a:a}),a},r=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__,o.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);o.r(f);var d={};a=a||[null,r({}),r([]),r(r)];for(var c=2&t&&e;("object"==typeof c||"function"==typeof c)&&!~a.indexOf(c);c=r(c))Object.getOwnPropertyNames(c).forEach(a=>d[a]=()=>e[a]);return d.default=()=>e,o.d(f,d),f},o.d=(e,a)=>{for(var r in a)o.o(a,r)&&!o.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:a[r]})},o.f={},o.e=e=>Promise.all(Object.keys(o.f).reduce((a,r)=>(o.f[r](e,a),a),[])),o.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",5848:"d03060d0",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:"fae170b0",165:"7b1d067d",291:"1b64972f",571:"efa6fc46",617:"e8fa27b8",961:"7f9f70e7",1e3:"f9af7a41",1203:"b618bb61",1567:"8f33e94e",1741:"b927934f",1746:"1ce4b99b",2130:"09232a19",2237:"70c48bab",2272:"65b2eb8b",2279:"44341cb1",2291:"2753844f",2325:"7c4239a7",2334:"6d98e48e",2492:"e6c78669",2668:"07349ef3",2821:"7e574346",3207:"e4ca90dd",3490:"026802f4",3624:"a9a49a51",3815:"f87fc96a",4218:"0662e556",4250:"77e8e6c6",4616:"0d0b0873",4802:"a8b2857c",4981:"61cf4b0a",5480:"23265b76",5490:"6bdf311d",5668:"8aade99d",5742:"2f625fe1",5750:"0bb94724",5848:"4e243f92",5901:"f6ccb00b",5955:"14464ff3",5996:"b2d1663e",6152:"7edb6c39",6190:"a397b62a",6235:"34562fc1",6241:"a1fa513c",6319:"9020eb44",6366:"0c77f825",6567:"08800141",6919:"dc47ac79",6976:"83099c13",6992:"eb4cc2ed",7098:"9fea9356",7465:"7e0b8008",7592:"d6165eff",7873:"083fcc2e",7928:"5f633e47",8142:"5edfc34d",8186:"0f05b0ce",8249:"4f81048e",8401:"afd63cb1",8565:"6a562290",8615:"33b6f886",8617:"cb3f5111",8731:"4bc22343",8756:"74d5516d",9026:"70f205a2",9032:"f4369ef2",9048:"fa9eaf65",9172:"88a60d4e",9412:"ca1dda85",9510:"81e2df6a",9532:"9fafa665",9647:"d28d5273"}[e]+".js",o.miniCssF=e=>{},o.o=(e,a)=>Object.prototype.hasOwnProperty.call(e,a),t={},f="openrag-docs:",o.l=(e,a,r,d)=>{if(t[e])t[e].push(a);else{var c,b;if(void 0!==r)for(var n=document.getElementsByTagName("script"),i=0;i{c.onerror=c.onload=null,clearTimeout(s);var f=t[e];if(delete t[e],c.parentNode&&c.parentNode.removeChild(c),f&&f.forEach(e=>e(r)),a)return a(r)},s=setTimeout(u.bind(null,void 0,{type:"timeout",target:c}),12e4);c.onerror=u.bind(null,c.onerror),c.onload=u.bind(null,c.onload),b&&document.head.appendChild(c)}},o.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},o.p="/",o.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",d03060d0:"5848","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,o.p+o.u(e)},(()=>{var e={5354:0,1869:0};o.f.j=(a,r)=>{var t=o.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 d=o.p+o.u(a),c=new Error;o.l(d,r=>{if(o.o(e,a)&&(0!==(t=e[a])&&(e[a]=void 0),t)){var f=r&&("load"===r.type?"missing":r.type),d=r&&r.target&&r.target.src;c.message="Loading chunk "+a+" failed.\n("+f+": "+d+")",c.name="ChunkLoadError",c.type=f,c.request=d,t[1](c)}},"chunk-"+a,a)}},o.O.j=a=>0===e[a];var a=(a,r)=>{var t,f,[d,c,b]=r,n=0;if(d.some(a=>0!==e[a])){for(t in c)o.o(c,t)&&(o.m[t]=c[t]);if(b)var i=b(o)}for(a&&a(r);n{"use strict";var e,a,r,t,d,f={},c={};function o(e){var a=c[e];if(void 0!==a)return a.exports;var r=c[e]={exports:{}};return f[e].call(r.exports,r,r.exports,o),r.exports}o.m=f,e=[],o.O=(a,r,t,d)=>{if(!r){var f=1/0;for(i=0;i=d)&&Object.keys(o.O).every(e=>o.O[e](r[b]))?r.splice(b--,1):(c=!1,d0&&e[i-1][2]>d;i--)e[i]=e[i-1];e[i]=[r,t,d]},o.n=e=>{var a=e&&e.__esModule?()=>e.default:()=>e;return o.d(a,{a:a}),a},r=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__,o.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 d=Object.create(null);o.r(d);var f={};a=a||[null,r({}),r([]),r(r)];for(var c=2&t&&e;("object"==typeof c||"function"==typeof c)&&!~a.indexOf(c);c=r(c))Object.getOwnPropertyNames(c).forEach(a=>f[a]=()=>e[a]);return f.default=()=>e,o.d(d,f),d},o.d=(e,a)=>{for(var r in a)o.o(a,r)&&!o.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:a[r]})},o.f={},o.e=e=>Promise.all(Object.keys(o.f).reduce((a,r)=>(o.f[r](e,a),a),[])),o.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",5848:"d03060d0",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:"fae170b0",165:"7b1d067d",291:"1b64972f",571:"e346183d",617:"e8fa27b8",961:"7f9f70e7",1e3:"f9af7a41",1203:"b618bb61",1567:"8f33e94e",1741:"b927934f",1746:"1ce4b99b",2130:"09232a19",2237:"70c48bab",2272:"fa610c63",2279:"44341cb1",2291:"2753844f",2325:"7c4239a7",2334:"6d98e48e",2492:"e6c78669",2668:"07349ef3",2821:"7e574346",3207:"e4ca90dd",3490:"026802f4",3624:"a9a49a51",3815:"f87fc96a",4218:"0662e556",4250:"77e8e6c6",4616:"0d0b0873",4802:"a8b2857c",4981:"61cf4b0a",5480:"23265b76",5490:"6bdf311d",5668:"8aade99d",5742:"2f625fe1",5750:"c52456be",5848:"4e243f92",5901:"f6ccb00b",5955:"14464ff3",5996:"b2d1663e",6152:"7edb6c39",6190:"a397b62a",6235:"34562fc1",6241:"a1fa513c",6319:"9020eb44",6366:"0c77f825",6567:"08800141",6919:"dc47ac79",6976:"9417b2ce",6992:"eb4cc2ed",7098:"9fea9356",7465:"7e0b8008",7592:"d6165eff",7873:"083fcc2e",7928:"5f633e47",8142:"5edfc34d",8186:"0f05b0ce",8249:"4f81048e",8401:"afd63cb1",8565:"6a562290",8615:"33b6f886",8617:"ca64d962",8731:"4bc22343",8756:"74d5516d",9026:"75fa4391",9032:"f4369ef2",9048:"fa9eaf65",9172:"88a60d4e",9412:"ca1dda85",9510:"81e2df6a",9532:"9fafa665",9647:"d28d5273"}[e]+".js",o.miniCssF=e=>{},o.o=(e,a)=>Object.prototype.hasOwnProperty.call(e,a),t={},d="openrag-docs:",o.l=(e,a,r,f)=>{if(t[e])t[e].push(a);else{var c,b;if(void 0!==r)for(var n=document.getElementsByTagName("script"),i=0;i{c.onerror=c.onload=null,clearTimeout(s);var d=t[e];if(delete t[e],c.parentNode&&c.parentNode.removeChild(c),d&&d.forEach(e=>e(r)),a)return a(r)},s=setTimeout(u.bind(null,void 0,{type:"timeout",target:c}),12e4);c.onerror=u.bind(null,c.onerror),c.onload=u.bind(null,c.onload),b&&document.head.appendChild(c)}},o.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},o.p="/",o.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",d03060d0:"5848","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,o.p+o.u(e)},(()=>{var e={5354:0,1869:0};o.f.j=(a,r)=>{var t=o.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 d=new Promise((r,d)=>t=e[a]=[r,d]);r.push(t[2]=d);var f=o.p+o.u(a),c=new Error;o.l(f,r=>{if(o.o(e,a)&&(0!==(t=e[a])&&(e[a]=void 0),t)){var d=r&&("load"===r.type?"missing":r.type),f=r&&r.target&&r.target.src;c.message="Loading chunk "+a+" failed.\n("+d+": "+f+")",c.name="ChunkLoadError",c.type=d,c.request=f,t[1](c)}},"chunk-"+a,a)}},o.O.j=a=>0===e[a];var a=(a,r)=>{var t,d,[f,c,b]=r,n=0;if(f.some(a=>0!==e[a])){for(t in c)o.o(c,t)&&(o.m[t]=c[t]);if(b)var i=b(o)}for(a&&a(r);n Chat in OpenRAG | OpenRAG - + diff --git a/docker/index.html b/docker/index.html index 767df583..14a0156a 100644 --- a/docker/index.html +++ b/docker/index.html @@ -4,7 +4,7 @@ Deploy OpenRAG with self-managed services | OpenRAG - + @@ -153,7 +153,7 @@ Additionally, this enables the
Status: running
Endpoint: http://127.0.0.1:5001
Docs: http://127.0.0.1:5001/docs
PID: 27746
  • -

    Deploy the OpenRAG containers locally using the appropriate Docker Compose configuration for your environment.

    +

    Deploy the OpenRAG containers locally using the appropriate Docker Compose configuration for your environment:

    Set the local documents path

    The default path for local uploads is ~/.openrag/documents. This is mounted to the /app/openrag-documents/ directory inside the OpenRAG container. Files added to the host or container directory are visible in both locations.

    -

    To change this location, modify the Documents Paths variable in either the Advanced Setup menu or in your OpenRAG .env file.

    +

    To change this location, modify the Documents Paths variable in either the Basic/Advanced Setup menu or in your OpenRAG .env file.

    Delete knowledge

    warning

    This is a destructive operation that cannot be undone.

    To clear your entire knowledge base, reset your OpenRAG containers or reinstall OpenRAG.

    diff --git a/manage-services/index.html b/manage-services/index.html index 06c8c132..7c99aba9 100644 --- a/manage-services/index.html +++ b/manage-services/index.html @@ -4,7 +4,7 @@ Manage OpenRAG containers and services | OpenRAG - + diff --git a/quickstart/index.html b/quickstart/index.html index d8a5e819..39933620 100644 --- a/quickstart/index.html +++ b/quickstart/index.html @@ -4,7 +4,7 @@ Quickstart | OpenRAG - + diff --git a/reference/configuration/index.html b/reference/configuration/index.html index f6a1ece7..8c66f5ba 100644 --- a/reference/configuration/index.html +++ b/reference/configuration/index.html @@ -4,7 +4,7 @@ Environment variables | OpenRAG - + @@ -44,7 +44,7 @@ Some of these variables are immutable and can only be changed by redeploying Ope
    VariableDefaultDescription
    EMBEDDING_MODELtext-embedding-3-smallEmbedding model for generating vector embeddings for documents in the knowledge base and similarity search queries. Can be changed after the application onboarding process. Accepts one or more models.
    LLM_MODELgpt-4o-miniLanguage model for language processing and text generation in the Chat feature.
    MODEL_PROVIDERopenaiModel provider, as one of openai, watsonx, ollama, or anthropic.
    ANTHROPIC_API_KEYNot setAPI key for the Anthropic language model provider.
    OPENAI_API_KEYNot setAPI key for the OpenAI model provider, which is also the default model provider.
    OLLAMA_ENDPOINTNot setCustom provider endpoint for the Ollama model provider.
    WATSONX_API_KEYNot setAPI key for the IBM watsonx.ai model provider.
    WATSONX_ENDPOINTNot setCustom provider endpoint for the IBM watsonx.ai model provider.
    WATSONX_PROJECT_IDNot setProject ID for the IBM watsonx.ai model provider.

    Document processing settings

    Control how OpenRAG processes and ingests documents into your knowledge base.

    -
    VariableDefaultDescription
    CHUNK_OVERLAP200Overlap between chunks.
    CHUNK_SIZE1000Text chunk size for document processing.
    DISABLE_INGEST_WITH_LANGFLOWfalseDisable Langflow ingestion pipeline.
    DOCLING_OCR_ENGINESet by OSOCR engine for document processing. For macOS, ocrmac. For any other OS, easyocr.
    OCR_ENABLEDfalseEnable OCR for image processing.
    OPENRAG_DOCUMENTS_PATHS~/.openrag/documentsDocument paths for ingestion.
    PICTURE_DESCRIPTIONS_ENABLEDfalseEnable picture descriptions.
    +
    VariableDefaultDescription
    CHUNK_OVERLAP200Overlap between chunks.
    CHUNK_SIZE1000Text chunk size for document processing.
    DISABLE_INGEST_WITH_LANGFLOWfalseDisable Langflow ingestion pipeline.
    DOCLING_OCR_ENGINESet by OSOCR engine for document processing. For macOS, ocrmac. For any other OS, easyocr.
    OCR_ENABLEDfalseEnable OCR for image processing.
    OPENRAG_DOCUMENTS_PATH~/.openrag/documentsThe local documents path for ingestion.
    PICTURE_DESCRIPTIONS_ENABLEDfalseEnable picture descriptions.

    Langflow settings

    Configure the OpenRAG Langflow server's authentication, contact point, and built-in flow definitions.

    info

    The LANGFLOW_SUPERUSER_PASSWORD is set in your .env file, and this value determines the default values for several other Langflow authentication variables.

    If the LANGFLOW_SUPERUSER_PASSWORD variable isn't set, then the Langflow server starts without authentication enabled.

    For better security, it is recommended to set LANGFLOW_SUPERUSER_PASSWORD so the Langflow server starts with authentication enabled.

    diff --git a/reinstall/index.html b/reinstall/index.html index 0fa28b21..8874ac41 100644 --- a/reinstall/index.html +++ b/reinstall/index.html @@ -4,7 +4,7 @@ Reinstall OpenRAG | OpenRAG - + diff --git a/support/contribute/index.html b/support/contribute/index.html index 4b7384b3..89c91159 100644 --- a/support/contribute/index.html +++ b/support/contribute/index.html @@ -4,7 +4,7 @@ Contribute to OpenRAG | OpenRAG - + diff --git a/support/troubleshoot/index.html b/support/troubleshoot/index.html index 3bb7a29f..9021947c 100644 --- a/support/troubleshoot/index.html +++ b/support/troubleshoot/index.html @@ -4,7 +4,7 @@ Troubleshoot OpenRAG | OpenRAG - + diff --git a/tui/index.html b/tui/index.html index 27f59700..3b00389f 100644 --- a/tui/index.html +++ b/tui/index.html @@ -4,7 +4,7 @@ Use the TUI | OpenRAG - + diff --git a/uninstall/index.html b/uninstall/index.html index cde3da01..dba5c30a 100644 --- a/uninstall/index.html +++ b/uninstall/index.html @@ -4,7 +4,7 @@ Remove OpenRAG | OpenRAG - + diff --git a/upgrade/index.html b/upgrade/index.html index 0cf28078..71011d29 100644 --- a/upgrade/index.html +++ b/upgrade/index.html @@ -4,7 +4,7 @@ Upgrade OpenRAG | OpenRAG - +