openrag/assets/js/03ef5215.0f05b0ce.js
2026-01-05 21:32:48 +00:00

1 line
No EOL
21 KiB
JavaScript

"use strict";(globalThis.webpackChunkopenrag_docs=globalThis.webpackChunkopenrag_docs||[]).push([[8186],{937:(e,n,s)=>{s.d(n,{Ay:()=>i,RM:()=>a});var r=s(4848),t=s(8453);const a=[];function o(e){const n={admonition:"admonition",code:"code",em:"em",li:"li",p:"p",ul:"ul",...(0,t.R)(),...e.components};return(0,r.jsxs)(n.admonition,{type:"warning",children:[(0,r.jsx)(n.p,{children:"This is a destructive operation that does the following:"}),(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"Destroys all OpenRAG containers, volumes, and local images."}),"\n",(0,r.jsx)(n.li,{children:"Prunes any additional container objects."}),"\n",(0,r.jsxs)(n.li,{children:["Deletes the contents of the ",(0,r.jsx)(n.code,{children:"~/.openrag"})," directory ",(0,r.jsx)(n.em,{children:"except"})," for OpenRAG's ",(0,r.jsx)(n.code,{children:".env"})," file and the ",(0,r.jsx)(n.code,{children:"/documents"})," subdirectory."]}),"\n"]}),(0,r.jsxs)(n.p,{children:[(0,r.jsx)("p",{}),"Destroyed containers and deleted data are lost and cannot be recovered after running this operation."]})]})}function i(e={}){const{wrapper:n}={...(0,t.R)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(o,{...e})}):o(e)}},1263:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>h,contentTitle:()=>u,default:()=>g,frontMatter:()=>d,metadata:()=>r,toc:()=>p});const r=JSON.parse('{"id":"get-started/manage-services","title":"Manage OpenRAG containers and services","description":"Service management is an essential part of maintaining your OpenRAG deployment.","source":"@site/docs/get-started/manage-services.mdx","sourceDirName":"get-started","slug":"/manage-services","permalink":"/manage-services","draft":false,"unlisted":false,"editUrl":"https://github.com/openrag/openrag/tree/main/docs/docs/get-started/manage-services.mdx","tags":[],"version":"current","frontMatter":{"title":"Manage OpenRAG containers and services","slug":"/manage-services"},"sidebar":"tutorialSidebar","previous":{"title":"Use the TUI","permalink":"/tui"},"next":{"title":"Flows","permalink":"/agents"}}');var t=s(4848),a=s(8453),o=s(1470),i=s(9365),c=(s(1381),s(9809),s(937)),l=s(9870);const d={title:"Manage OpenRAG containers and services",slug:"/manage-services"},u=void 0,h={},p=[{value:"Monitor services and view logs",id:"monitor-services-and-view-logs",level:2},{value:"Stop and start containers",id:"stop-and-start-containers",level:2},{value:"Stop, start, and inspect native services (Docling)",id:"start-native-services",level:2},{value:"Upgrade services",id:"upgrade-services",level:2},{value:"Reset containers (destructive)",id:"reset-containers",level:2},...c.RM,...l.RM,...l.RM,{value:"Prune images",id:"prune-images",level:2},{value:"See also",id:"see-also",level:2}];function m(e){const n={a:"a",code:"code",em:"em",h2:"h2",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,a.R)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.p,{children:"Service management is an essential part of maintaining your OpenRAG deployment."}),"\n",(0,t.jsx)(n.p,{children:"Most OpenRAG services run in containers.\nHowever, some services, like Docling, run directly on the local machine."}),"\n",(0,t.jsxs)(n.p,{children:["If you ",(0,t.jsx)(n.a,{href:"/install-options",children:"installed OpenRAG"})," with the automated installer script, ",(0,t.jsx)(n.code,{children:"uv"}),", or ",(0,t.jsx)(n.code,{children:"uvx"}),", you can use the ",(0,t.jsx)(n.a,{href:"/tui",children:"Terminal User Interface (TUI)"})," to manage your OpenRAG configuration and services."]}),"\n",(0,t.jsxs)(n.p,{children:["For ",(0,t.jsx)(n.a,{href:"/docker",children:"self-managed deployments"}),", run Docker or Podman commands to manage your OpenRAG services."]}),"\n",(0,t.jsx)(n.h2,{id:"monitor-services-and-view-logs",children:"Monitor services and view logs"}),"\n",(0,t.jsxs)(o.A,{children:[(0,t.jsxs)(i.A,{value:"TUI",label:"TUI-managed services",default:!0,children:[(0,t.jsxs)(n.p,{children:["In the TUI, click ",(0,t.jsx)(n.strong,{children:"Status"})," to access diagnostics and controls for all OpenRAG services, including container health, ports, and image versions."]}),(0,t.jsxs)(n.p,{children:["To view streaming logs, click the name of a service, and then press ",(0,t.jsx)("kbd",{children:"l"}),"."]}),(0,t.jsxs)(n.p,{children:["For the Docling native service, see ",(0,t.jsx)(n.a,{href:"#start-native-services",children:"Stop, start, and inspect native services"}),"."]})]}),(0,t.jsxs)(i.A,{value:"env",label:"Self-managed services",children:[(0,t.jsxs)(n.p,{children:["For self-managed container services, you can get container logs with ",(0,t.jsx)(n.a,{href:"https://docs.docker.com/reference/cli/docker/compose/logs/",children:(0,t.jsx)(n.code,{children:"docker compose logs"})})," or ",(0,t.jsx)(n.a,{href:"https://docs.podman.io/en/latest/markdown/podman-logs.1.html",children:(0,t.jsx)(n.code,{children:"podman logs"})}),"."]}),(0,t.jsxs)(n.p,{children:["For the Docling native service, see ",(0,t.jsx)(n.a,{href:"#start-native-services",children:"Stop, start, and inspect native services"}),"."]})]})]}),"\n",(0,t.jsx)(n.h2,{id:"stop-and-start-containers",children:"Stop and start containers"}),"\n",(0,t.jsxs)(o.A,{children:[(0,t.jsxs)(i.A,{value:"TUI",label:"TUI-managed services",default:!0,children:[(0,t.jsxs)(n.p,{children:["On the TUI's ",(0,t.jsx)(n.strong,{children:"Status"})," page, you can stop, start, and restart OpenRAG's container-based services."]}),(0,t.jsxs)(n.p,{children:["When you click ",(0,t.jsx)(n.strong,{children:"Restart"})," or ",(0,t.jsx)(n.strong,{children:"Start Services"}),", the following processes are triggered:"]}),(0,t.jsxs)(n.ol,{children:["\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["OpenRAG automatically detects your container runtime, and then checks if your machine has compatible GPU support by checking for ",(0,t.jsx)(n.code,{children:"CUDA"}),", ",(0,t.jsx)(n.code,{children:"NVIDIA_SMI"}),", and Docker/Podman runtime support. This check determines which Docker Compose file OpenRAG uses because there are separate Docker Compose files for GPU and CPU deployments."]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["OpenRAG pulls the OpenRAG container images with ",(0,t.jsx)(n.code,{children:"docker compose pull"})," if any images are missing."]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["OpenRAG deploys the containers with ",(0,t.jsx)(n.code,{children:"docker compose up -d"}),"."]}),"\n"]}),"\n"]})]}),(0,t.jsxs)(i.A,{value:"env",label:"Self-managed services",children:[(0,t.jsxs)(n.p,{children:["Use ",(0,t.jsx)(n.a,{href:"https://docs.docker.com/reference/cli/docker/compose/down/",children:(0,t.jsx)(n.code,{children:"docker compose down"})})," and ",(0,t.jsx)(n.a,{href:"https://docs.docker.com/reference/cli/docker/compose/up/",children:(0,t.jsx)(n.code,{children:"docker compose up -d"})}),"."]}),(0,t.jsxs)(n.p,{children:["To stop or start individual containers, use targeted commands like ",(0,t.jsx)(n.code,{children:"docker stop CONTAINER_ID"})," and ",(0,t.jsx)(n.code,{children:"docker start CONTAINER_ID"}),"."]})]})]}),"\n",(0,t.jsx)(n.h2,{id:"start-native-services",children:"Stop, start, and inspect native services (Docling)"}),"\n",(0,t.jsxs)(n.p,{children:["A ",(0,t.jsx)(n.em,{children:"native service"})," in OpenRAG is a service that runs locally on your machine, not within a container. For example, the ",(0,t.jsx)(n.code,{children:"docling serve"})," process is an OpenRAG native service because this document processing service runs on your local machine, separate from the OpenRAG containers."]}),"\n",(0,t.jsxs)(o.A,{children:[(0,t.jsxs)(i.A,{value:"TUI",label:"TUI-managed services",default:!0,children:[(0,t.jsxs)(n.p,{children:["On the TUI's ",(0,t.jsx)(n.strong,{children:"Status"})," page, you can stop, start, restart, and inspect OpenRAG's native services."]}),(0,t.jsxs)(n.p,{children:["The ",(0,t.jsx)(n.strong,{children:"Native Services"})," section lists the status, port, and process ID (PID) for each native service."]}),(0,t.jsxs)(n.p,{children:["To manage a native service, click the service's name, and then click ",(0,t.jsx)(n.strong,{children:"Stop"}),", ",(0,t.jsx)(n.strong,{children:"Start"})," or ",(0,t.jsx)(n.strong,{children:"Restart"}),"."]}),(0,t.jsxs)(n.p,{children:["To view the logs for a native service, click the service's name, and then press ",(0,t.jsx)("kbd",{children:"l"}),"."]})]}),(0,t.jsxs)(i.A,{value:"env",label:"Self-managed services",children:[(0,t.jsx)(n.p,{children:"Because the Docling service doesn't run in a container, you must start and stop it manually on the host machine:"}),(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["Stop ",(0,t.jsx)(n.code,{children:"docling serve"}),":"]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"uv run python scripts/docling_ctl.py stop\n"})}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["Start ",(0,t.jsx)(n.code,{children:"docling serve"}),":"]}),"\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"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["Check that ",(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-text",children:"Status: running\nEndpoint: http://127.0.0.1:5001\nDocs: http://127.0.0.1:5001/docs\nPID: 27746\n"})}),"\n"]}),"\n"]})]})]}),"\n",(0,t.jsx)(n.h2,{id:"upgrade-services",children:"Upgrade services"}),"\n",(0,t.jsxs)(n.p,{children:["See ",(0,t.jsx)(n.a,{href:"/upgrade",children:"Upgrade OpenRAG"}),"."]}),"\n",(0,t.jsx)(n.h2,{id:"reset-containers",children:"Reset containers (destructive)"}),"\n",(0,t.jsx)(c.Ay,{}),"\n",(0,t.jsxs)(n.p,{children:["Use these steps to reset your OpenRAG deployment by recreating the containers and deleting all data in the ",(0,t.jsx)(n.code,{children:"~/.openrag"})," directory ",(0,t.jsx)(n.em,{children:"except"})," for the ",(0,t.jsx)(n.code,{children:".env"})," file and the ",(0,t.jsx)(n.code,{children:"/documents"})," subdirectory."]}),"\n",(0,t.jsxs)(n.p,{children:["This restores your OpenRAG deployment to a near-initial state while preserving your configuration (in ",(0,t.jsx)(n.code,{children:".env"}),") and uploaded documents (in ",(0,t.jsx)(n.code,{children:"/documents"}),").\nYour documents are reingested into a fresh OpenSearch index after the reset."]}),"\n",(0,t.jsxs)(n.p,{children:["To reset your OpenRAG deployment ",(0,t.jsx)(n.em,{children:"and"})," delete all OpenRAG data, see ",(0,t.jsx)(n.a,{href:"/reinstall",children:"Reinstall OpenRAG"}),"."]}),"\n",(0,t.jsxs)(o.A,{children:[(0,t.jsxs)(i.A,{value:"TUI",label:"TUI-managed services",default:!0,children:[(0,t.jsx)(l.Ay,{}),(0,t.jsxs)(n.ol,{start:"2",children:["\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["To destroy and recreate your OpenRAG containers, click ",(0,t.jsx)(n.strong,{children:"Status"})," in the TUI, and then click ",(0,t.jsx)(n.strong,{children:"Factory Reset"}),"."]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["Repeat the ",(0,t.jsx)(n.a,{href:"/install#setup",children:"setup process"})," to restart the services and launch the OpenRAG app. Your OpenRAG passwords, OAuth credentials (if previously set), and onboarding configuration are restored from the ",(0,t.jsx)(n.code,{children:".env"})," file."]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["If you exported customized flows, ",(0,t.jsx)(n.a,{href:"https://docs.langflow.org/concepts-flows-import",children:"import your flows"})," into Langflow after completing the onboarding process."]}),"\n"]}),"\n"]})]}),(0,t.jsxs)(i.A,{value:"env",label:"Self-managed services",children:[(0,t.jsx)(l.Ay,{}),(0,t.jsxs)(n.ol,{start:"2",children:["\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:"Recreate the containers:"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",metastring:'title="Docker"',children:"docker compose up --build --force-recreate --remove-orphans\n"})}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",metastring:'title="Podman"',children:"podman compose up --build --force-recreate --remove-orphans\n"})}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["Launch the OpenRAG app, and then repeat the ",(0,t.jsx)(n.a,{href:"/docker#application-onboarding",children:"application onboarding process"}),"."]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["If you exported customized flows, ",(0,t.jsx)(n.a,{href:"https://docs.langflow.org/concepts-flows-import",children:"import your flows"})," into Langflow after completing the onboarding process."]}),"\n"]}),"\n"]})]})]}),"\n",(0,t.jsx)(n.h2,{id:"prune-images",children:"Prune images"}),"\n",(0,t.jsx)(n.p,{children:"Use image pruning to free up disk space by removing unused OpenRAG container images."}),"\n",(0,t.jsxs)(n.p,{children:["For TUI-managed services, use the TUI's ",(0,t.jsx)(n.strong,{children:"Prune Images"})," option to clean up your OpenRAG container images.\nYou can choose to prune unused images only or all images.\nIf you prune all images, the OpenRAG services are stopped, all images are pruned, and then the required images are pulled the next time you start the OpenRAG services."]}),"\n",(0,t.jsxs)(n.p,{children:["For self-managed services, use ",(0,t.jsx)(n.a,{href:"https://docs.docker.com/engine/reference/commandline/image_prune/",children:(0,t.jsx)(n.code,{children:"docker image prune"})})," or ",(0,t.jsx)(n.a,{href:"https://docs.podman.io/en/latest/markdown/podman-image-prune.1.html",children:(0,t.jsx)(n.code,{children:"podman image prune"})})," to remove unused images."]}),"\n",(0,t.jsx)(n.h2,{id:"see-also",children:"See also"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.a,{href:"/uninstall",children:"Uninstall OpenRAG"})}),"\n"]})]})}function g(e={}){const{wrapper:n}={...(0,a.R)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(m,{...e})}):m(e)}},1381:(e,n,s)=>{s.d(n,{Ay:()=>i,RM:()=>a});var r=s(4848),t=s(8453);const a=[];function o(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 i(e={}){const{wrapper:n}={...(0,t.R)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(o,{...e})}):o(e)}},1470:(e,n,s)=>{s.d(n,{A:()=>w});var r=s(6540),t=s(4164),a=s(7559),o=s(3104),i=s(6347),c=s(205),l=s(7485),d=s(1682),u=s(679);function h(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 <Tabs> child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the <Tabs> component should be <TabItem>, and every <TabItem> 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 h(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 <Tabs>. Every value needs to be unique.`)}(e),e},[n,s])}function m({value:e,tabValues:n}){return n.some(n=>n.value===e)}function g({queryString:e=!1,groupId:n}){const s=(0,i.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 <Tabs> component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return n??null}({queryString:e,groupId:n});return[(0,l.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 x(e){const{defaultValue:n,queryString:s=!1,groupId:t}=e,a=p(e),[o,i]=(0,r.useState)(()=>function({defaultValue:e,tabValues:n}){if(0===n.length)throw new Error("Docusaurus error: the <Tabs> component requires at least one <TabItem> children component");if(e){if(!m({value:e,tabValues:n}))throw new Error(`Docusaurus error: The <Tabs> has a defaultValue "${e}" but none of its children has the corresponding value. Available values are: ${n.map(e=>e.value).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return e}const s=n.find(e=>e.default)??n[0];if(!s)throw new Error("Unexpected error: 0 tabValues");return s.value}({defaultValue:n,tabValues:a})),[l,d]=g({queryString:s,groupId:t}),[h,x]=function({groupId:e}){const n=function(e){return e?`docusaurus.tab.${e}`:null}(e),[s,t]=(0,u.Dv)(n);return[s,(0,r.useCallback)(e=>{n&&t.set(e)},[n,t])]}({groupId:t}),j=(()=>{const e=l??h;return m({value:e,tabValues:a})?e:null})();(0,c.A)(()=>{j&&i(j)},[j]);return{selectedValue:o,selectValue:(0,r.useCallback)(e=>{if(!m({value:e,tabValues:a}))throw new Error(`Can't select invalid tab value=${e}`);i(e),d(e),x(e)},[d,x,a]),tabValues:a}}var j=s(2303);const v={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var f=s(4848);function b({className:e,block:n,selectedValue:s,selectValue:r,tabValues:a}){const i=[],{blockElementScrollPositionUntilNextRender:c}=(0,o.a_)(),l=e=>{const n=e.currentTarget,t=i.indexOf(n),o=a[t].value;o!==s&&(c(n),r(o))},d=e=>{let n=null;switch(e.key){case"Enter":l(e);break;case"ArrowRight":{const s=i.indexOf(e.currentTarget)+1;n=i[s]??i[0];break}case"ArrowLeft":{const s=i.indexOf(e.currentTarget)-1;n=i[s]??i[i.length-1];break}}n?.focus()};return(0,f.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,t.A)("tabs",{"tabs--block":n},e),children:a.map(({value:e,label:n,attributes:r})=>(0,f.jsx)("li",{role:"tab",tabIndex:s===e?0:-1,"aria-selected":s===e,ref:e=>{i.push(e)},onKeyDown:d,onClick:l,...r,className:(0,t.A)("tabs__item",v.tabItem,r?.className,{"tabs__item--active":s===e}),children:n??e},e))})}function y({lazy:e,children:n,selectedValue:s}){const a=(Array.isArray(n)?n:[n]).filter(Boolean);if(e){const e=a.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,f.jsx)("div",{className:"margin-top--md",children:a.map((e,n)=>(0,r.cloneElement)(e,{key:n,hidden:e.props.value!==s}))})}function A(e){const n=x(e);return(0,f.jsxs)("div",{className:(0,t.A)(a.G.tabs.container,"tabs-container",v.tabList),children:[(0,f.jsx)(b,{...n,...e}),(0,f.jsx)(y,{...n,...e})]})}function w(e){const n=(0,j.A)();return(0,f.jsx)(A,{...e,children:h(e.children)},String(n))}},8453:(e,n,s)=>{s.d(n,{R:()=>o,x:()=>i});var r=s(6540);const t={},a=r.createContext(t);function o(e){const n=r.useContext(a);return r.useMemo(function(){return"function"==typeof e?e(n):{...n,...e}},[n,e])}function i(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:o(e.components),r.createElement(a.Provider,{value:n},e.children)}},9365:(e,n,s)=>{s.d(n,{A:()=>o});s(6540);var r=s(4164);const t={tabItem:"tabItem_Ymn6"};var a=s(4848);function o({children:e,hidden:n,className:s}){return(0,a.jsx)("div",{role:"tabpanel",className:(0,r.A)(t.tabItem,s),hidden:n,children:e})}},9809:(e,n,s)=>{s.d(n,{Ay:()=>i,RM:()=>a});var r=s(4848),t=s(8453);const a=[];function o(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 down --volumes --remove-orphans --rmi local\ndocker system prune -f\n"})}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",metastring:'title="Podman"',children:"podman compose down --volumes --remove-orphans --rmi local\npodman system prune -f\n"})})]})}function i(e={}){const{wrapper:n}={...(0,t.R)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(o,{...e})}):o(e)}},9870:(e,n,s)=>{s.d(n,{Ay:()=>i,RM:()=>a});var r=s(4848),t=s(8453);const a=[];function o(e){const n={a:"a",li:"li",ol:"ol",...(0,t.R)(),...e.components};return(0,r.jsxs)(n.ol,{children:["\n",(0,r.jsxs)(n.li,{children:["If you modified the built-in flows or created custom flows in your ",(0,r.jsx)(n.a,{href:"/agents",children:"OpenRAG Langflow instance"}),", ",(0,r.jsx)(n.a,{href:"https://docs.langflow.org/concepts-flows-import",children:"export your flows"})," before starting this process. Although OpenRAG can preserve changes to the built-in flows, it doesn't preserve user-created flows. As a general best practice, exporting your flows is recommended to create backups of your customizations. Afterwards, you can reimport your flows or reference the exported flow JSON as needed."]}),"\n"]})}function i(e={}){const{wrapper:n}={...(0,t.R)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(o,{...e})}):o(e)}}}]);