diff --git a/404.html b/404.html index b85802d6b8..17fed6f5d2 100644 --- a/404.html +++ b/404.html @@ -25,7 +25,7 @@ - + diff --git a/agent-tutorial.html b/agent-tutorial.html index 3cae705a71..8b45cc7616 100644 --- a/agent-tutorial.html +++ b/agent-tutorial.html @@ -25,7 +25,7 @@ - + diff --git a/agents-tools.html b/agents-tools.html index eef51de777..3867aa2720 100644 --- a/agents-tools.html +++ b/agents-tools.html @@ -25,7 +25,7 @@ - + diff --git a/agents.html b/agents.html index 3709bec0b2..ea0aee94ee 100644 --- a/agents.html +++ b/agents.html @@ -25,7 +25,7 @@ - + diff --git a/api-build.html b/api-build.html index 6438d430a9..2af3b8efda 100644 --- a/api-build.html +++ b/api-build.html @@ -25,7 +25,7 @@ - + diff --git a/api-files.html b/api-files.html index 72182a5d2b..4dd09f3b8d 100644 --- a/api-files.html +++ b/api-files.html @@ -25,7 +25,7 @@ - + diff --git a/api-flows-run.html b/api-flows-run.html index 986ce30f0f..0503f6e852 100644 --- a/api-flows-run.html +++ b/api-flows-run.html @@ -25,7 +25,7 @@ - + diff --git a/api-flows.html b/api-flows.html index cbab3d244a..0e3a83d856 100644 --- a/api-flows.html +++ b/api-flows.html @@ -25,7 +25,7 @@ - + diff --git a/api-keys-and-authentication.html b/api-keys-and-authentication.html index 4e82bfc1ba..cd6838b930 100644 --- a/api-keys-and-authentication.html +++ b/api-keys-and-authentication.html @@ -25,7 +25,7 @@ - + diff --git a/api-logs.html b/api-logs.html index 6a9a1812b7..d203e060a9 100644 --- a/api-logs.html +++ b/api-logs.html @@ -25,7 +25,7 @@ - + diff --git a/api-monitor.html b/api-monitor.html index bc9344c0e1..09df435170 100644 --- a/api-monitor.html +++ b/api-monitor.html @@ -25,7 +25,7 @@ - + diff --git a/api-openai-responses.html b/api-openai-responses.html index e7ca435b75..a6080cc71d 100644 --- a/api-openai-responses.html +++ b/api-openai-responses.html @@ -25,7 +25,7 @@ - + diff --git a/api-projects.html b/api-projects.html index 5438e3c9f7..bee9334ae6 100644 --- a/api-projects.html +++ b/api-projects.html @@ -25,7 +25,7 @@ - + diff --git a/api-reference-api-examples.html b/api-reference-api-examples.html index 965904faee..06fed497f8 100644 --- a/api-reference-api-examples.html +++ b/api-reference-api-examples.html @@ -25,7 +25,7 @@ - + diff --git a/api-request.html b/api-request.html index c63c183474..d3065b5ee3 100644 --- a/api-request.html +++ b/api-request.html @@ -25,7 +25,7 @@ - + diff --git a/api-users.html b/api-users.html index d0ee6b4cf7..c766108840 100644 --- a/api-users.html +++ b/api-users.html @@ -25,7 +25,7 @@ - + diff --git a/api.html b/api.html index bd3cd985e9..178ee52fd9 100644 --- a/api.html +++ b/api.html @@ -25,7 +25,7 @@ - + diff --git a/api/openapi.json.html b/api/openapi.json.html index 20799e7ff4..6fe2f42b43 100644 --- a/api/openapi.json.html +++ b/api/openapi.json.html @@ -25,7 +25,7 @@ - + diff --git a/api/workflow.html b/api/workflow.html index 002708c4aa..75df056913 100644 --- a/api/workflow.html +++ b/api/workflow.html @@ -25,7 +25,7 @@ - + diff --git a/assets/js/2b56b65e.20952bb6.js b/assets/js/2b56b65e.20952bb6.js new file mode 100644 index 0000000000..f980a523ec --- /dev/null +++ b/assets/js/2b56b65e.20952bb6.js @@ -0,0 +1 @@ +"use strict";(globalThis.webpackChunklangflow_docs=globalThis.webpackChunklangflow_docs||[]).push([[7824],{11470:(o,t,e)=>{e.d(t,{A:()=>k});var n=e(96540),s=e(18215),r=e(17559),l=e(23104),c=e(56347),a=e(205),p=e(57485),i=e(31682),d=e(70679);function h(o){return n.Children.toArray(o).filter(o=>"\n"!==o).map(o=>{if(!o||(0,n.isValidElement)(o)&&function(o){const{props:t}=o;return!!t&&"object"==typeof t&&"value"in t}(o))return o;throw new Error(`Docusaurus error: Bad child <${"string"==typeof o.type?o.type:o.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)})?.filter(Boolean)??[]}function u(o){const{values:t,children:e}=o;return(0,n.useMemo)(()=>{const o=t??function(o){return h(o).map(({props:{value:o,label:t,attributes:e,default:n}})=>({value:o,label:t,attributes:e,default:n}))}(e);return function(o){const t=(0,i.XI)(o,(o,t)=>o.value===t.value);if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map(o=>o.value).join(", ")}" found in . Every value needs to be unique.`)}(o),o},[t,e])}function y({value:o,tabValues:t}){return t.some(t=>t.value===o)}function D({queryString:o=!1,groupId:t}){const e=(0,c.W6)(),s=function({queryString:o=!1,groupId:t}){if("string"==typeof o)return o;if(!1===o)return null;if(!0===o&&!t)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 t??null}({queryString:o,groupId:t});return[(0,p.aZ)(s),(0,n.useCallback)(o=>{if(!s)return;const t=new URLSearchParams(e.location.search);t.set(s,o),e.replace({...e.location,search:t.toString()})},[s,e])]}function F(o){const{defaultValue:t,queryString:e=!1,groupId:s}=o,r=u(o),[l,c]=(0,n.useState)(()=>function({defaultValue:o,tabValues:t}){if(0===t.length)throw new Error("Docusaurus error: the component requires at least one children component");if(o){if(!y({value:o,tabValues:t}))throw new Error(`Docusaurus error: The has a defaultValue "${o}" but none of its children has the corresponding value. Available values are: ${t.map(o=>o.value).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return o}const e=t.find(o=>o.default)??t[0];if(!e)throw new Error("Unexpected error: 0 tabValues");return e.value}({defaultValue:t,tabValues:r})),[p,i]=D({queryString:e,groupId:s}),[h,F]=function({groupId:o}){const t=function(o){return o?`docusaurus.tab.${o}`:null}(o),[e,s]=(0,d.Dv)(t);return[e,(0,n.useCallback)(o=>{t&&s.set(o)},[t,s])]}({groupId:s}),f=(()=>{const o=p??h;return y({value:o,tabValues:r})?o:null})();(0,a.A)(()=>{f&&c(f)},[f]);return{selectedValue:l,selectValue:(0,n.useCallback)(o=>{if(!y({value:o,tabValues:r}))throw new Error(`Can't select invalid tab value=${o}`);c(o),i(o),F(o)},[i,F,r]),tabValues:r}}var f=e(92303);const g={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var C=e(74848);function m({className:o,block:t,selectedValue:e,selectValue:n,tabValues:r}){const c=[],{blockElementScrollPositionUntilNextRender:a}=(0,l.a_)(),p=o=>{const t=o.currentTarget,s=c.indexOf(t),l=r[s].value;l!==e&&(a(t),n(l))},i=o=>{let t=null;switch(o.key){case"Enter":p(o);break;case"ArrowRight":{const e=c.indexOf(o.currentTarget)+1;t=c[e]??c[0];break}case"ArrowLeft":{const e=c.indexOf(o.currentTarget)-1;t=c[e]??c[c.length-1];break}}t?.focus()};return(0,C.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,s.A)("tabs",{"tabs--block":t},o),children:r.map(({value:o,label:t,attributes:n})=>(0,C.jsx)("li",{role:"tab",tabIndex:e===o?0:-1,"aria-selected":e===o,ref:o=>{c.push(o)},onKeyDown:i,onClick:p,...n,className:(0,s.A)("tabs__item",g.tabItem,n?.className,{"tabs__item--active":e===o}),children:t??o},o))})}function x({lazy:o,children:t,selectedValue:e}){const r=(Array.isArray(t)?t:[t]).filter(Boolean);if(o){const o=r.find(o=>o.props.value===e);return o?(0,n.cloneElement)(o,{className:(0,s.A)("margin-top--md",o.props.className)}):null}return(0,C.jsx)("div",{className:"margin-top--md",children:r.map((o,t)=>(0,n.cloneElement)(o,{key:t,hidden:o.props.value!==e}))})}function b(o){const t=F(o);return(0,C.jsxs)("div",{className:(0,s.A)(r.G.tabs.container,"tabs-container",g.tabList),children:[(0,C.jsx)(m,{...t,...o}),(0,C.jsx)(x,{...t,...o})]})}function k(o){const t=(0,f.A)();return(0,C.jsx)(b,{...o,children:h(o.children)},String(t))}},19365:(o,t,e)=>{e.d(t,{A:()=>l});e(96540);var n=e(18215);const s={tabItem:"tabItem_Ymn6"};var r=e(74848);function l({children:o,hidden:t,className:e}){return(0,r.jsx)("div",{role:"tabpanel",className:(0,n.A)(s.tabItem,e),hidden:t,children:o})}},59403:(o,t,e)=>{e.d(t,{A:()=>n});const n=e.p+"assets/images/tutorial-chatbot-embed-files-6157311fb4d16e7f944d55254f0cc0e2.png"},87636:(o,t,e)=>{e.r(t),e.d(t,{CH:()=>u,assets:()=>h,chCodeConfig:()=>y,contentTitle:()=>d,default:()=>f,frontMatter:()=>i,metadata:()=>n,toc:()=>D});const n=JSON.parse('{"id":"Tutorials/chat-with-rag","title":"Create a vector RAG chatbot","description":"This tutorial demonstrates how you can use Langflow to create a chatbot application that uses Retrieval Augmented Generation (RAG) to embed your data as vectors in a vector database, and then chat with the data.","source":"@site/docs/Tutorials/chat-with-rag.mdx","sourceDirName":"Tutorials","slug":"/chat-with-rag","permalink":"/chat-with-rag","draft":false,"unlisted":false,"tags":[],"version":"current","frontMatter":{"title":"Create a vector RAG chatbot","slug":"/chat-with-rag"},"sidebar":"docs","previous":{"title":"Quickstart","permalink":"/get-started-quickstart"},"next":{"title":"Create a chatbot that can ingest files","permalink":"/chat-with-files"}}');var s=e(74848),r=e(28453),l=e(24754),c=e(40619),a=e(11470),p=e(19365);const i={title:"Create a vector RAG chatbot",slug:"/chat-with-rag"},d=void 0,h={},u={annotations:l.hk,Code:l.Cy},y={staticMediaQuery:"not screen, (max-width: 768px)",lineNumbers:!0,showCopyButton:!0,themeName:"github-dark"},D=[{value:"Prerequisites",id:"prerequisites",level:2},{value:"Create a vector RAG flow",id:"create-a-vector-rag-flow",level:2},{value:"Load data and generate embeddings",id:"load-data-and-generate-embeddings",level:2},{value:"Chat with your flow from a JavaScript application",id:"chat-with-your-flow-from-a-javascript-application",level:2},{value:"Next steps",id:"next-steps",level:2}];function F(o){const t={a:"a",admonition:"admonition",code:"code",h2:"h2",img:"img",li:"li",ol:"ol",p:"p",strong:"strong",ul:"ul",...(0,r.R)(),...o.components},{Details:n}=t;return u||g("CH",!1),u.Code||g("CH.Code",!0),n||g("Details",!0),(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)("style",{dangerouslySetInnerHTML:{__html:'[data-ch-theme="github-dark"] { --ch-t-colorScheme: dark;--ch-t-foreground: #c9d1d9;--ch-t-background: #0d1117;--ch-t-lighter-inlineBackground: #0d1117e6;--ch-t-editor-background: #0d1117;--ch-t-editor-foreground: #c9d1d9;--ch-t-editor-lineHighlightBackground: #6e76811a;--ch-t-editor-rangeHighlightBackground: #ffffff0b;--ch-t-editor-infoForeground: #3794FF;--ch-t-editor-selectionBackground: #264F78;--ch-t-focusBorder: #1f6feb;--ch-t-tab-activeBackground: #0d1117;--ch-t-tab-activeForeground: #c9d1d9;--ch-t-tab-inactiveBackground: #010409;--ch-t-tab-inactiveForeground: #8b949e;--ch-t-tab-border: #30363d;--ch-t-tab-activeBorder: #0d1117;--ch-t-editorGroup-border: #30363d;--ch-t-editorGroupHeader-tabsBackground: #010409;--ch-t-editorLineNumber-foreground: #6e7681;--ch-t-input-background: #0d1117;--ch-t-input-foreground: #c9d1d9;--ch-t-input-border: #30363d;--ch-t-icon-foreground: #8b949e;--ch-t-sideBar-background: #010409;--ch-t-sideBar-foreground: #c9d1d9;--ch-t-sideBar-border: #30363d;--ch-t-list-activeSelectionBackground: #6e768166;--ch-t-list-activeSelectionForeground: #c9d1d9;--ch-t-list-hoverBackground: #6e76811a;--ch-t-list-hoverForeground: #c9d1d9; }'}}),"\n","\n",(0,s.jsx)(t.p,{children:"This tutorial demonstrates how you can use Langflow to create a chatbot application that uses Retrieval Augmented Generation (RAG) to embed your data as vectors in a vector database, and then chat with the data."}),"\n",(0,s.jsx)(t.h2,{id:"prerequisites",children:"Prerequisites"}),"\n",(0,s.jsxs)(t.ul,{children:["\n",(0,s.jsx)(t.li,{children:(0,s.jsx)(t.a,{href:"/get-started-installation",children:"Install and start Langflow"})}),"\n",(0,s.jsxs)(t.li,{children:["Create a ",(0,s.jsx)(t.a,{href:"/api-keys-and-authentication",children:"Langflow API key"})]}),"\n",(0,s.jsxs)(t.li,{children:["Create an ",(0,s.jsx)(t.a,{href:"https://platform.openai.com/api-keys",children:"OpenAI API key"})]}),"\n",(0,s.jsxs)(t.li,{children:["Install the ",(0,s.jsx)(t.a,{href:"/typescript-client",children:"Langflow JavaScript client"})]}),"\n",(0,s.jsx)(t.li,{children:"Be familiar with vector search concepts and applications, such as vector databases and RAG"}),"\n"]}),"\n",(0,s.jsx)(t.h2,{id:"create-a-vector-rag-flow",children:"Create a vector RAG flow"}),"\n",(0,s.jsxs)(t.ol,{children:["\n",(0,s.jsxs)(t.li,{children:["\n",(0,s.jsxs)(t.p,{children:["In Langflow, click ",(0,s.jsx)(t.strong,{children:"New Flow"}),", and then select the ",(0,s.jsx)(t.strong,{children:"Vector Store RAG"})," template."]}),"\n",(0,s.jsxs)(n,{children:[(0,s.jsx)("summary",{children:"About the Vector Store RAG template"}),(0,s.jsx)(t.p,{children:"This template has two flows."}),(0,s.jsxs)(t.p,{children:["The ",(0,s.jsx)(t.strong,{children:"Load Data Flow"})," populates a vector store with data from a file.\nThis data is used to respond to queries submitted to the ",(0,s.jsx)(t.strong,{children:"Retriever Flow"}),"."]}),(0,s.jsxs)(t.p,{children:["Specifically, the ",(0,s.jsx)(t.strong,{children:"Load Data Flow"})," ingests data from a local file, splits the data into chunks, loads and indexes the data in your vector database, and then computes embeddings for the chunks. The embeddings are also stored with the loaded data. This flow only needs to run when you need to load data into your vector database."]}),(0,s.jsxs)(t.p,{children:["The ",(0,s.jsx)(t.strong,{children:"Retriever Flow"})," receives chat input, generates an embedding for the input, and then uses several components to reconstruct chunks into text and generate a response by comparing the new embedding to the stored embeddings to find similar data."]})]}),"\n"]}),"\n",(0,s.jsxs)(t.li,{children:["\n",(0,s.jsxs)(t.p,{children:["Add your ",(0,s.jsx)(t.strong,{children:"OpenAI"})," API key to both ",(0,s.jsx)(t.strong,{children:"OpenAI Embeddings"})," components."]}),"\n"]}),"\n",(0,s.jsxs)(t.li,{children:["\n",(0,s.jsxs)(t.p,{children:["Optional: Replace both ",(0,s.jsx)(t.strong,{children:"Astra DB"})," vector store components with a ",(0,s.jsx)(t.strong,{children:"Chroma DB"})," or another vector store component of your choice.\nThis tutorial uses Chroma DB."]}),"\n",(0,s.jsxs)(t.p,{children:["The ",(0,s.jsx)(t.strong,{children:"Load Data Flow"})," should have ",(0,s.jsx)(t.strong,{children:"Read File"}),", ",(0,s.jsx)(t.strong,{children:"Split Text"}),", ",(0,s.jsx)(t.strong,{children:"Embedding Model"}),", vector store (such as ",(0,s.jsx)(t.strong,{children:"Chroma DB"}),"), and ",(0,s.jsx)(t.strong,{children:"Chat Output"})," components:"]}),"\n",(0,s.jsx)(t.p,{children:(0,s.jsx)(t.img,{alt:"File loader chat flow",src:e(59403).A+"",width:"4000",height:"2512"})}),"\n",(0,s.jsxs)(t.p,{children:["The ",(0,s.jsx)(t.strong,{children:"Retriever Flow"})," should have ",(0,s.jsx)(t.strong,{children:"Chat Input"}),", ",(0,s.jsx)(t.strong,{children:"Embedding Model"}),", vector store, ",(0,s.jsx)(t.strong,{children:"Parser"}),", ",(0,s.jsx)(t.strong,{children:"Prompt"}),", ",(0,s.jsx)(t.strong,{children:"Language Model"}),", and ",(0,s.jsx)(t.strong,{children:"Chat Output"})," components:"]}),"\n",(0,s.jsx)(t.p,{children:(0,s.jsx)(t.img,{alt:"Chat with RAG flow",src:e(96973).A+"",width:"4000",height:"1324"})}),"\n",(0,s.jsx)(t.p,{children:"The flows are ready to use.\nContinue the tutorial to learn how to use the loading flow to load data into your vector store, and then call the chat flow in a chatbot application."}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(t.h2,{id:"load-data-and-generate-embeddings",children:"Load data and generate embeddings"}),"\n",(0,s.jsxs)(t.p,{children:["To load data and generate embeddings, you can use the visual editor or the ",(0,s.jsx)(t.code,{children:"/v2/files"})," endpoint."]}),"\n",(0,s.jsx)(t.p,{children:"The visual editor option is simpler, but it is only recommended for scenarios where the user who created the flow is the same user who loads data into the database."}),"\n",(0,s.jsx)(t.p,{children:"In situations where many users load data or you need to load data programmatically, use the Langflow API option."}),"\n",(0,s.jsxs)(a.A,{children:[(0,s.jsx)(p.A,{value:"visual",label:"Visual editor",default:!0,children:(0,s.jsxs)(t.ol,{children:["\n",(0,s.jsxs)(t.li,{children:["In your RAG chatbot flow, click the ",(0,s.jsx)(t.strong,{children:"Read File"})," component, and then click ",(0,s.jsx)(t.strong,{children:"File"}),"."]}),"\n",(0,s.jsxs)(t.li,{children:["Select the local file you want to upload, and then click ",(0,s.jsx)(t.strong,{children:"Open"}),".\nThe file is loaded to your Langflow server."]}),"\n",(0,s.jsxs)(t.li,{children:["To load the data into your vector database, click the vector store component, and then click ",(0,s.jsx)(c.A,{name:"Play","aria-hidden":"true"})," ",(0,s.jsx)(t.strong,{children:"Run component"})," to run the selected component and all prior dependent components."]}),"\n"]})}),(0,s.jsxs)(p.A,{value:"API",label:"Langflow API",children:[(0,s.jsxs)(t.p,{children:["To load data programmatically, use the ",(0,s.jsx)(t.code,{children:"/v2/files/"})," and ",(0,s.jsx)(t.code,{children:"/v1/run/$FLOW_ID"})," endpoints. The first endpoint loads a file to your Langflow server, and then returns an uploaded file path. The second endpoint runs the ",(0,s.jsx)(t.strong,{children:"Load Data Flow"}),", referencing the uploaded file path, to chunk, embed, and load the data into the vector store."]}),(0,s.jsx)(t.admonition,{type:"tip",children:(0,s.jsxs)(t.p,{children:["For an example of constructing file upload requests in Python, see the ",(0,s.jsx)(t.a,{href:"/chat-with-files#send-requests-to-your-flow-from-a-python-application",children:"Create a chatbot that can ingest files tutorial"}),"."]})}),(0,s.jsx)(t.p,{children:"The following script demonstrates this process."}),(0,s.jsx)(u.Code,{codeConfig:y,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"// Node 18+ example using global fetch, FormData, and Blob",props:{style:{color:"#8B949E"}}}]},{tokens:[{content:"import",props:{style:{color:"#FF7B72"}}},{content:" fs ",props:{style:{color:"#C9D1D9"}}},{content:"from ",props:{style:{color:"#FF7B72"}}},{content:"'fs/promises'",props:{style:{color:"#A5D6FF"}}},{content:";",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"// 1. Prepare the form data with the file to upload",props:{style:{color:"#8B949E"}}}]},{tokens:[{content:"const ",props:{style:{color:"#FF7B72"}}},{content:"fileBuffer ",props:{style:{color:"#79C0FF"}}},{content:"= await",props:{style:{color:"#FF7B72"}}},{content:" fs.",props:{style:{color:"#C9D1D9"}}},{content:"readFile",props:{style:{color:"#D2A8FF"}}},{content:"(",props:{style:{color:"#C9D1D9"}}},{content:"'FILE_NAME'",props:{style:{color:"#A5D6FF"}}},{content:");",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"const ",props:{style:{color:"#FF7B72"}}},{content:"data ",props:{style:{color:"#79C0FF"}}},{content:"= new ",props:{style:{color:"#FF7B72"}}},{content:"FormData",props:{style:{color:"#D2A8FF"}}},{content:"();",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"data.",props:{style:{color:"#C9D1D9"}}},{content:"append",props:{style:{color:"#D2A8FF"}}},{content:"(",props:{style:{color:"#C9D1D9"}}},{content:"'file'",props:{style:{color:"#A5D6FF"}}},{content:", ",props:{style:{color:"#C9D1D9"}}},{content:"new ",props:{style:{color:"#FF7B72"}}},{content:"Blob",props:{style:{color:"#D2A8FF"}}},{content:"([fileBuffer]), ",props:{style:{color:"#C9D1D9"}}},{content:"'FILE_NAME'",props:{style:{color:"#A5D6FF"}}},{content:");",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"const ",props:{style:{color:"#FF7B72"}}},{content:"headers ",props:{style:{color:"#79C0FF"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:" { ",props:{style:{color:"#C9D1D9"}}},{content:"'x-api-key'",props:{style:{color:"#A5D6FF"}}},{content:": ",props:{style:{color:"#C9D1D9"}}},{content:"'LANGFLOW_API_KEY'",props:{style:{color:"#A5D6FF"}}},{content:" };",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"// 2. Upload the file to Langflow",props:{style:{color:"#8B949E"}}}]},{tokens:[{content:"const ",props:{style:{color:"#FF7B72"}}},{content:"uploadRes ",props:{style:{color:"#79C0FF"}}},{content:"= await ",props:{style:{color:"#FF7B72"}}},{content:"fetch",props:{style:{color:"#D2A8FF"}}},{content:"(",props:{style:{color:"#C9D1D9"}}},{content:"'LANGFLOW_SERVER_ADDRESS/api/v2/files/'",props:{style:{color:"#A5D6FF"}}},{content:", {",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" method: ",props:{style:{color:"#C9D1D9"}}},{content:"'POST'",props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" headers,",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" body: data",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"});",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"const ",props:{style:{color:"#FF7B72"}}},{content:"uploadData ",props:{style:{color:"#79C0FF"}}},{content:"= await",props:{style:{color:"#FF7B72"}}},{content:" uploadRes.",props:{style:{color:"#C9D1D9"}}},{content:"json",props:{style:{color:"#D2A8FF"}}},{content:"();",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"const ",props:{style:{color:"#FF7B72"}}},{content:"uploadedPath ",props:{style:{color:"#79C0FF"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:" uploadData.path;",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"// 3. Call the Langflow run endpoint with the uploaded file path",props:{style:{color:"#8B949E"}}}]},{tokens:[{content:"const ",props:{style:{color:"#FF7B72"}}},{content:"payload ",props:{style:{color:"#79C0FF"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:" {",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" input_value: ",props:{style:{color:"#C9D1D9"}}},{content:'"Analyze this file"',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" output_type: ",props:{style:{color:"#C9D1D9"}}},{content:'"chat"',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" input_type: ",props:{style:{color:"#C9D1D9"}}},{content:'"text"',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" tweaks: {",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" 'FILE_COMPONENT_NAME'",props:{style:{color:"#A5D6FF"}}},{content:": {",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" path: uploadedPath",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" }",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" }",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"};",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"const ",props:{style:{color:"#FF7B72"}}},{content:"runRes ",props:{style:{color:"#79C0FF"}}},{content:"= await ",props:{style:{color:"#FF7B72"}}},{content:"fetch",props:{style:{color:"#D2A8FF"}}},{content:"(",props:{style:{color:"#C9D1D9"}}},{content:"'LANGFLOW_SERVER_ADDRESS/api/v1/run/FLOW_ID'",props:{style:{color:"#A5D6FF"}}},{content:", {",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" method: ",props:{style:{color:"#C9D1D9"}}},{content:"'POST'",props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" headers: { ",props:{style:{color:"#C9D1D9"}}},{content:"'Content-Type'",props:{style:{color:"#A5D6FF"}}},{content:": ",props:{style:{color:"#C9D1D9"}}},{content:"'application/json'",props:{style:{color:"#A5D6FF"}}},{content:", ",props:{style:{color:"#C9D1D9"}}},{content:"'x-api-key'",props:{style:{color:"#A5D6FF"}}},{content:": ",props:{style:{color:"#C9D1D9"}}},{content:"'LANGFLOW_API_KEY'",props:{style:{color:"#A5D6FF"}}},{content:" },",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" body: ",props:{style:{color:"#C9D1D9"}}},{content:"JSON",props:{style:{color:"#79C0FF"}}},{content:".",props:{style:{color:"#C9D1D9"}}},{content:"stringify",props:{style:{color:"#D2A8FF"}}},{content:"(payload)",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"});",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"const ",props:{style:{color:"#FF7B72"}}},{content:"langflowData ",props:{style:{color:"#79C0FF"}}},{content:"= await",props:{style:{color:"#FF7B72"}}},{content:" runRes.",props:{style:{color:"#C9D1D9"}}},{content:"json",props:{style:{color:"#D2A8FF"}}},{content:"();",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"// Output only the message",props:{style:{color:"#8B949E"}}}]},{tokens:[{content:"console.",props:{style:{color:"#C9D1D9"}}},{content:"log",props:{style:{color:"#D2A8FF"}}},{content:"(langflowData.outputs?.[",props:{style:{color:"#C9D1D9"}}},{content:"0",props:{style:{color:"#79C0FF"}}},{content:"]?.outputs?.[",props:{style:{color:"#C9D1D9"}}},{content:"0",props:{style:{color:"#79C0FF"}}},{content:"]?.results?.message?.data?.text);",props:{style:{color:"#C9D1D9"}}}]}],lang:"js"},annotations:[]}]})]})]}),"\n",(0,s.jsx)(t.p,{children:"When the flow runs, the flow ingests the selected file, chunks the data, loads the data into the vector store database, and then generates embeddings for the chunks, which are also stored in the vector store."}),"\n",(0,s.jsx)(t.p,{children:"Your database now contains data with vector embeddings that an LLM can use as context to respond to queries, as demonstrated in the next section of the tutorial."}),"\n",(0,s.jsx)(t.h2,{id:"chat-with-your-flow-from-a-javascript-application",children:"Chat with your flow from a JavaScript application"}),"\n",(0,s.jsxs)(t.p,{children:["To chat with the data in your vector database, create a chatbot application that runs the ",(0,s.jsx)(t.strong,{children:"Retriever Flow"})," programmatically."]}),"\n",(0,s.jsx)(t.p,{children:"This tutorial uses JavaScript for demonstration purposes."}),"\n",(0,s.jsxs)(t.ol,{children:["\n",(0,s.jsxs)(t.li,{children:["\n",(0,s.jsx)(t.p,{children:"To construct the chatbot, gather the following information:"}),"\n",(0,s.jsxs)(t.ul,{children:["\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.code,{children:"LANGFLOW_SERVER_ADDRESS"}),": Your Langflow server's domain. The default value is ",(0,s.jsx)(t.code,{children:"127.0.0.1:7860"}),". You can get this value from the code snippets on your flow's ",(0,s.jsxs)(t.a,{href:"/concepts-publish#api-access",children:[(0,s.jsx)(t.strong,{children:"API access"})," pane"]}),"."]}),"\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.code,{children:"FLOW_ID"}),": Your flow's UUID or custom endpoint name. You can get this value from the code snippets on your flow's ",(0,s.jsxs)(t.a,{href:"/concepts-publish#api-access",children:[(0,s.jsx)(t.strong,{children:"API access"})," pane"]}),"."]}),"\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.code,{children:"LANGFLOW_API_KEY"}),": A valid ",(0,s.jsx)(t.a,{href:"/api-keys-and-authentication",children:"Langflow API key"}),"."]}),"\n"]}),"\n"]}),"\n",(0,s.jsxs)(t.li,{children:["\n",(0,s.jsx)(t.p,{children:"Copy the following script into a JavaScript file, and then replace the placeholders with the information you gathered in the previous step:"}),"\n",(0,s.jsx)(u.Code,{codeConfig:y,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"const ",props:{style:{color:"#FF7B72"}}},{content:"readline ",props:{style:{color:"#79C0FF"}}},{content:"= ",props:{style:{color:"#FF7B72"}}},{content:"require",props:{style:{color:"#D2A8FF"}}},{content:"(",props:{style:{color:"#C9D1D9"}}},{content:"'readline'",props:{style:{color:"#A5D6FF"}}},{content:");",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"const",props:{style:{color:"#FF7B72"}}},{content:" { ",props:{style:{color:"#C9D1D9"}}},{content:"LangflowClient",props:{style:{color:"#79C0FF"}}},{content:" } ",props:{style:{color:"#C9D1D9"}}},{content:"= ",props:{style:{color:"#FF7B72"}}},{content:"require",props:{style:{color:"#D2A8FF"}}},{content:"(",props:{style:{color:"#C9D1D9"}}},{content:"'@datastax/langflow-client'",props:{style:{color:"#A5D6FF"}}},{content:");",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"# ",props:{style:{color:"#C9D1D9"}}},{content:"pragma",props:{style:{color:"#FFA657"}}},{content:": allowlist nextline secret",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"const ",props:{style:{color:"#FF7B72"}}},{content:"API_KEY ",props:{style:{color:"#79C0FF"}}},{content:"= ",props:{style:{color:"#FF7B72"}}},{content:"'LANGFLOW_API_KEY'",props:{style:{color:"#A5D6FF"}}},{content:";",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"const ",props:{style:{color:"#FF7B72"}}},{content:"SERVER ",props:{style:{color:"#79C0FF"}}},{content:"= ",props:{style:{color:"#FF7B72"}}},{content:"'LANGFLOW_SERVER_ADDRESS'",props:{style:{color:"#A5D6FF"}}},{content:";",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"const ",props:{style:{color:"#FF7B72"}}},{content:"FLOW_ID ",props:{style:{color:"#79C0FF"}}},{content:"= ",props:{style:{color:"#FF7B72"}}},{content:"'FLOW_ID'",props:{style:{color:"#A5D6FF"}}},{content:";",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"const ",props:{style:{color:"#FF7B72"}}},{content:"rl ",props:{style:{color:"#79C0FF"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:" readline.",props:{style:{color:"#C9D1D9"}}},{content:"createInterface",props:{style:{color:"#D2A8FF"}}},{content:"({ input: process.stdin, output: process.stdout });",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"// Initialize the Langflow client",props:{style:{color:"#8B949E"}}}]},{tokens:[{content:"const ",props:{style:{color:"#FF7B72"}}},{content:"client ",props:{style:{color:"#79C0FF"}}},{content:"= new ",props:{style:{color:"#FF7B72"}}},{content:"LangflowClient",props:{style:{color:"#D2A8FF"}}},{content:"({",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" baseUrl: ",props:{style:{color:"#C9D1D9"}}},{content:"SERVER",props:{style:{color:"#79C0FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" apiKey: ",props:{style:{color:"#C9D1D9"}}},{content:"API_KEY",props:{style:{color:"#79C0FF"}}}]},{tokens:[{content:"});",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"async function ",props:{style:{color:"#FF7B72"}}},{content:"sendMessage",props:{style:{color:"#D2A8FF"}}},{content:"(",props:{style:{color:"#C9D1D9"}}},{content:"message",props:{style:{color:"#FFA657"}}},{content:") {",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" try",props:{style:{color:"#FF7B72"}}},{content:" {",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" const ",props:{style:{color:"#FF7B72"}}},{content:"response ",props:{style:{color:"#79C0FF"}}},{content:"= await",props:{style:{color:"#FF7B72"}}},{content:" client.",props:{style:{color:"#C9D1D9"}}},{content:"flow",props:{style:{color:"#D2A8FF"}}},{content:"(",props:{style:{color:"#C9D1D9"}}},{content:"FLOW_ID",props:{style:{color:"#79C0FF"}}},{content:").",props:{style:{color:"#C9D1D9"}}},{content:"run",props:{style:{color:"#D2A8FF"}}},{content:"(message, {",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" session_id: ",props:{style:{color:"#C9D1D9"}}},{content:"'user_1'",props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:" });",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" // Use the convenience method to get the chat output text",props:{style:{color:"#8B949E"}}}]},{tokens:[{content:" return",props:{style:{color:"#FF7B72"}}},{content:" response.",props:{style:{color:"#C9D1D9"}}},{content:"chatOutputText",props:{style:{color:"#D2A8FF"}}},{content:"() ",props:{style:{color:"#C9D1D9"}}},{content:"|| ",props:{style:{color:"#FF7B72"}}},{content:"'No response'",props:{style:{color:"#A5D6FF"}}},{content:";",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" } ",props:{style:{color:"#C9D1D9"}}},{content:"catch",props:{style:{color:"#FF7B72"}}},{content:" (error) {",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" return ",props:{style:{color:"#FF7B72"}}},{content:"`Error: ${",props:{style:{color:"#A5D6FF"}}},{content:"error",props:{style:{color:"#C9D1D9"}}},{content:".",props:{style:{color:"#A5D6FF"}}},{content:"message",props:{style:{color:"#C9D1D9"}}},{content:"}`",props:{style:{color:"#A5D6FF"}}},{content:";",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" }",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"}",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"function ",props:{style:{color:"#FF7B72"}}},{content:"chat",props:{style:{color:"#D2A8FF"}}},{content:"() {",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" console.",props:{style:{color:"#C9D1D9"}}},{content:"log",props:{style:{color:"#D2A8FF"}}},{content:"(",props:{style:{color:"#C9D1D9"}}},{content:'\'\ud83e\udd16 Langflow RAG Chatbot (type "quit" to exit)',props:{style:{color:"#A5D6FF"}}},{content:"\\n",props:{style:{color:"#79C0FF"}}},{content:"'",props:{style:{color:"#A5D6FF"}}},{content:");",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" const ",props:{style:{color:"#FF7B72"}}},{content:"ask ",props:{style:{color:"#D2A8FF"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:" () ",props:{style:{color:"#C9D1D9"}}},{content:"=>",props:{style:{color:"#FF7B72"}}},{content:" {",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" rl.",props:{style:{color:"#C9D1D9"}}},{content:"question",props:{style:{color:"#D2A8FF"}}},{content:"(",props:{style:{color:"#C9D1D9"}}},{content:"'\ud83d\udc64 You: '",props:{style:{color:"#A5D6FF"}}},{content:", ",props:{style:{color:"#C9D1D9"}}},{content:"async",props:{style:{color:"#FF7B72"}}},{content:" (",props:{style:{color:"#C9D1D9"}}},{content:"input",props:{style:{color:"#FFA657"}}},{content:") ",props:{style:{color:"#C9D1D9"}}},{content:"=>",props:{style:{color:"#FF7B72"}}},{content:" {",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" if",props:{style:{color:"#FF7B72"}}},{content:" ([",props:{style:{color:"#C9D1D9"}}},{content:"'quit'",props:{style:{color:"#A5D6FF"}}},{content:", ",props:{style:{color:"#C9D1D9"}}},{content:"'exit'",props:{style:{color:"#A5D6FF"}}},{content:", ",props:{style:{color:"#C9D1D9"}}},{content:"'bye'",props:{style:{color:"#A5D6FF"}}},{content:"].",props:{style:{color:"#C9D1D9"}}},{content:"includes",props:{style:{color:"#D2A8FF"}}},{content:"(input.",props:{style:{color:"#C9D1D9"}}},{content:"trim",props:{style:{color:"#D2A8FF"}}},{content:"().",props:{style:{color:"#C9D1D9"}}},{content:"toLowerCase",props:{style:{color:"#D2A8FF"}}},{content:"())) {",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" console.",props:{style:{color:"#C9D1D9"}}},{content:"log",props:{style:{color:"#D2A8FF"}}},{content:"(",props:{style:{color:"#C9D1D9"}}},{content:"'\ud83d\udc4b Goodbye!'",props:{style:{color:"#A5D6FF"}}},{content:");",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" rl.",props:{style:{color:"#C9D1D9"}}},{content:"close",props:{style:{color:"#D2A8FF"}}},{content:"();",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" return",props:{style:{color:"#FF7B72"}}},{content:";",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" }",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" const ",props:{style:{color:"#FF7B72"}}},{content:"response ",props:{style:{color:"#79C0FF"}}},{content:"= await ",props:{style:{color:"#FF7B72"}}},{content:"sendMessage",props:{style:{color:"#D2A8FF"}}},{content:"(input.",props:{style:{color:"#C9D1D9"}}},{content:"trim",props:{style:{color:"#D2A8FF"}}},{content:"());",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" console.",props:{style:{color:"#C9D1D9"}}},{content:"log",props:{style:{color:"#D2A8FF"}}},{content:"(",props:{style:{color:"#C9D1D9"}}},{content:"`\ud83e\udd16 Assistant: ${",props:{style:{color:"#A5D6FF"}}},{content:"response",props:{style:{color:"#C9D1D9"}}},{content:"}",props:{style:{color:"#A5D6FF"}}},{content:"\\n",props:{style:{color:"#79C0FF"}}},{content:"`",props:{style:{color:"#A5D6FF"}}},{content:");",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" ask",props:{style:{color:"#D2A8FF"}}},{content:"();",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" });",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" };",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" ask",props:{style:{color:"#D2A8FF"}}},{content:"();",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"}",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"chat",props:{style:{color:"#D2A8FF"}}},{content:"();",props:{style:{color:"#C9D1D9"}}}]}],lang:"js"},annotations:[]}]}),"\n",(0,s.jsxs)(t.p,{children:["The script creates a Node application that chats with the content in your vector database, using the ",(0,s.jsx)(t.code,{children:"chat"})," input and output types to communicate with your flow.\nChat maintains ongoing conversation context across multiple messages. If you used ",(0,s.jsx)(t.code,{children:"text"})," type inputs and outputs, each request is a standalone text string."]}),"\n",(0,s.jsx)(t.admonition,{type:"tip",children:(0,s.jsxs)(t.p,{children:["The ",(0,s.jsx)(t.a,{href:"/typescript-client",children:"Langflow TypeScript client"})," has a ",(0,s.jsx)(t.code,{children:"chatOutputText()"})," convenience method that simplifies working with Langflow's complex JSON response structure.\nInstead of manually navigating through multiple levels of nested objects with ",(0,s.jsx)(t.code,{children:"data.outputs[0].outputs[0].results.message.data.text"}),", the client automatically extracts the message text and handles potentially undefined values gracefully."]})}),"\n"]}),"\n",(0,s.jsxs)(t.li,{children:["\n",(0,s.jsx)(t.p,{children:"Save and run the script to send the requests and test the flow."}),"\n",(0,s.jsxs)(n,{children:[(0,s.jsx)("summary",{children:"Result"}),(0,s.jsx)(t.p,{children:"The following is an example response from this tutorial's flow. Due to the nature of LLMs and variations in your inputs, your response might be different."}),(0,s.jsx)(u.Code,{codeConfig:y,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"\ud83d\udc64 You: Do you have any documents about engines?",props:{}}]},{tokens:[{content:"\ud83e\udd16 Assistant: Yes, the provided text contains several warnings and guidelines related to engine installation, maintenance, and selection. It emphasizes the importance of using the correct engine for specific applications, ensuring all components are in good condition, and following safety precautions to prevent fire or explosion. If you need more specific information or details, please let me know!",props:{}}]},{tokens:[{content:"",props:{}}]},{tokens:[{content:"\ud83d\udc64 You: It should be about a Briggs and Stratton engine.",props:{}}]},{tokens:[{content:"\ud83e\udd16 Assistant: The text provides important safety and installation guidelines for Briggs & Stratton engines. It emphasizes that these engines should not be used on 3-wheel All-Terrain Vehicles (ATVs), motor bikes, aircraft products, or vehicles intended for competitive events, as such uses are not approved by Briggs & Stratton.",props:{}}]},{tokens:[{content:"",props:{}}]},{tokens:[{content:"If you have any specific questions about Briggs & Stratton engines or need further information, feel free to ask!",props:{}}]}],lang:"text"},annotations:[]}]})]}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(t.h2,{id:"next-steps",children:"Next steps"}),"\n",(0,s.jsx)(t.p,{children:"For more information on building or extending this tutorial, see the following:"}),"\n",(0,s.jsxs)(t.ul,{children:["\n",(0,s.jsx)(t.li,{children:(0,s.jsx)(t.a,{href:"/mcp-server",children:"Model Context Protocol (MCP) servers"})}),"\n",(0,s.jsx)(t.li,{children:(0,s.jsx)(t.a,{href:"/deployment-overview",children:"Langflow deployment overview"})}),"\n"]})]})}function f(o={}){const{wrapper:t}={...(0,r.R)(),...o.components};return t?(0,s.jsx)(t,{...o,children:(0,s.jsx)(F,{...o})}):F(o)}function g(o,t){throw new Error("Expected "+(t?"component":"object")+" `"+o+"` to be defined: you likely forgot to import, pass, or provide it.")}},96973:(o,t,e)=>{e.d(t,{A:()=>n});const n=e.p+"assets/images/tutorial-chatbot-chat-flow-af7257d77ff0259ab1a0980641d464ce.png"}}]); \ No newline at end of file diff --git a/assets/js/2b56b65e.48ec5133.js b/assets/js/2b56b65e.48ec5133.js deleted file mode 100644 index 0da68df0ed..0000000000 --- a/assets/js/2b56b65e.48ec5133.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(globalThis.webpackChunklangflow_docs=globalThis.webpackChunklangflow_docs||[]).push([[7824],{11470:(o,t,e)=>{e.d(t,{A:()=>k});var n=e(96540),s=e(18215),r=e(17559),l=e(23104),c=e(56347),a=e(205),p=e(57485),i=e(31682),d=e(70679);function h(o){return n.Children.toArray(o).filter(o=>"\n"!==o).map(o=>{if(!o||(0,n.isValidElement)(o)&&function(o){const{props:t}=o;return!!t&&"object"==typeof t&&"value"in t}(o))return o;throw new Error(`Docusaurus error: Bad child <${"string"==typeof o.type?o.type:o.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)})?.filter(Boolean)??[]}function u(o){const{values:t,children:e}=o;return(0,n.useMemo)(()=>{const o=t??function(o){return h(o).map(({props:{value:o,label:t,attributes:e,default:n}})=>({value:o,label:t,attributes:e,default:n}))}(e);return function(o){const t=(0,i.XI)(o,(o,t)=>o.value===t.value);if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map(o=>o.value).join(", ")}" found in . Every value needs to be unique.`)}(o),o},[t,e])}function y({value:o,tabValues:t}){return t.some(t=>t.value===o)}function D({queryString:o=!1,groupId:t}){const e=(0,c.W6)(),s=function({queryString:o=!1,groupId:t}){if("string"==typeof o)return o;if(!1===o)return null;if(!0===o&&!t)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 t??null}({queryString:o,groupId:t});return[(0,p.aZ)(s),(0,n.useCallback)(o=>{if(!s)return;const t=new URLSearchParams(e.location.search);t.set(s,o),e.replace({...e.location,search:t.toString()})},[s,e])]}function F(o){const{defaultValue:t,queryString:e=!1,groupId:s}=o,r=u(o),[l,c]=(0,n.useState)(()=>function({defaultValue:o,tabValues:t}){if(0===t.length)throw new Error("Docusaurus error: the component requires at least one children component");if(o){if(!y({value:o,tabValues:t}))throw new Error(`Docusaurus error: The has a defaultValue "${o}" but none of its children has the corresponding value. Available values are: ${t.map(o=>o.value).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return o}const e=t.find(o=>o.default)??t[0];if(!e)throw new Error("Unexpected error: 0 tabValues");return e.value}({defaultValue:t,tabValues:r})),[p,i]=D({queryString:e,groupId:s}),[h,F]=function({groupId:o}){const t=function(o){return o?`docusaurus.tab.${o}`:null}(o),[e,s]=(0,d.Dv)(t);return[e,(0,n.useCallback)(o=>{t&&s.set(o)},[t,s])]}({groupId:s}),f=(()=>{const o=p??h;return y({value:o,tabValues:r})?o:null})();(0,a.A)(()=>{f&&c(f)},[f]);return{selectedValue:l,selectValue:(0,n.useCallback)(o=>{if(!y({value:o,tabValues:r}))throw new Error(`Can't select invalid tab value=${o}`);c(o),i(o),F(o)},[i,F,r]),tabValues:r}}var f=e(92303);const g={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var C=e(74848);function m({className:o,block:t,selectedValue:e,selectValue:n,tabValues:r}){const c=[],{blockElementScrollPositionUntilNextRender:a}=(0,l.a_)(),p=o=>{const t=o.currentTarget,s=c.indexOf(t),l=r[s].value;l!==e&&(a(t),n(l))},i=o=>{let t=null;switch(o.key){case"Enter":p(o);break;case"ArrowRight":{const e=c.indexOf(o.currentTarget)+1;t=c[e]??c[0];break}case"ArrowLeft":{const e=c.indexOf(o.currentTarget)-1;t=c[e]??c[c.length-1];break}}t?.focus()};return(0,C.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,s.A)("tabs",{"tabs--block":t},o),children:r.map(({value:o,label:t,attributes:n})=>(0,C.jsx)("li",{role:"tab",tabIndex:e===o?0:-1,"aria-selected":e===o,ref:o=>{c.push(o)},onKeyDown:i,onClick:p,...n,className:(0,s.A)("tabs__item",g.tabItem,n?.className,{"tabs__item--active":e===o}),children:t??o},o))})}function x({lazy:o,children:t,selectedValue:e}){const r=(Array.isArray(t)?t:[t]).filter(Boolean);if(o){const o=r.find(o=>o.props.value===e);return o?(0,n.cloneElement)(o,{className:(0,s.A)("margin-top--md",o.props.className)}):null}return(0,C.jsx)("div",{className:"margin-top--md",children:r.map((o,t)=>(0,n.cloneElement)(o,{key:t,hidden:o.props.value!==e}))})}function b(o){const t=F(o);return(0,C.jsxs)("div",{className:(0,s.A)(r.G.tabs.container,"tabs-container",g.tabList),children:[(0,C.jsx)(m,{...t,...o}),(0,C.jsx)(x,{...t,...o})]})}function k(o){const t=(0,f.A)();return(0,C.jsx)(b,{...o,children:h(o.children)},String(t))}},19365:(o,t,e)=>{e.d(t,{A:()=>l});e(96540);var n=e(18215);const s={tabItem:"tabItem_Ymn6"};var r=e(74848);function l({children:o,hidden:t,className:e}){return(0,r.jsx)("div",{role:"tabpanel",className:(0,n.A)(s.tabItem,e),hidden:t,children:o})}},59403:(o,t,e)=>{e.d(t,{A:()=>n});const n=e.p+"assets/images/tutorial-chatbot-embed-files-6157311fb4d16e7f944d55254f0cc0e2.png"},87636:(o,t,e)=>{e.r(t),e.d(t,{CH:()=>u,assets:()=>h,chCodeConfig:()=>y,contentTitle:()=>d,default:()=>f,frontMatter:()=>i,metadata:()=>n,toc:()=>D});const n=JSON.parse('{"id":"Tutorials/chat-with-rag","title":"Create a vector RAG chatbot","description":"This tutorial demonstrates how you can use Langflow to create a chatbot application that uses Retrieval Augmented Generation (RAG) to embed your data as vectors in a vector database, and then chat with the data.","source":"@site/docs/Tutorials/chat-with-rag.mdx","sourceDirName":"Tutorials","slug":"/chat-with-rag","permalink":"/chat-with-rag","draft":false,"unlisted":false,"tags":[],"version":"current","frontMatter":{"title":"Create a vector RAG chatbot","slug":"/chat-with-rag"},"sidebar":"docs","previous":{"title":"Quickstart","permalink":"/get-started-quickstart"},"next":{"title":"Create a chatbot that can ingest files","permalink":"/chat-with-files"}}');var s=e(74848),r=e(28453),l=e(24754),c=e(40619),a=e(11470),p=e(19365);const i={title:"Create a vector RAG chatbot",slug:"/chat-with-rag"},d=void 0,h={},u={annotations:l.hk,Code:l.Cy},y={staticMediaQuery:"not screen, (max-width: 768px)",lineNumbers:!0,showCopyButton:!0,themeName:"github-dark"},D=[{value:"Prerequisites",id:"prerequisites",level:2},{value:"Create a vector RAG flow",id:"create-a-vector-rag-flow",level:2},{value:"Load data and generate embeddings",id:"load-data-and-generate-embeddings",level:2},{value:"Chat with your flow from a JavaScript application",id:"chat-with-your-flow-from-a-javascript-application",level:2},{value:"Next steps",id:"next-steps",level:2}];function F(o){const t={a:"a",admonition:"admonition",code:"code",h2:"h2",img:"img",li:"li",ol:"ol",p:"p",strong:"strong",ul:"ul",...(0,r.R)(),...o.components},{Details:n}=t;return u||g("CH",!1),u.Code||g("CH.Code",!0),n||g("Details",!0),(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)("style",{dangerouslySetInnerHTML:{__html:'[data-ch-theme="github-dark"] { --ch-t-colorScheme: dark;--ch-t-foreground: #c9d1d9;--ch-t-background: #0d1117;--ch-t-lighter-inlineBackground: #0d1117e6;--ch-t-editor-background: #0d1117;--ch-t-editor-foreground: #c9d1d9;--ch-t-editor-lineHighlightBackground: #6e76811a;--ch-t-editor-rangeHighlightBackground: #ffffff0b;--ch-t-editor-infoForeground: #3794FF;--ch-t-editor-selectionBackground: #264F78;--ch-t-focusBorder: #1f6feb;--ch-t-tab-activeBackground: #0d1117;--ch-t-tab-activeForeground: #c9d1d9;--ch-t-tab-inactiveBackground: #010409;--ch-t-tab-inactiveForeground: #8b949e;--ch-t-tab-border: #30363d;--ch-t-tab-activeBorder: #0d1117;--ch-t-editorGroup-border: #30363d;--ch-t-editorGroupHeader-tabsBackground: #010409;--ch-t-editorLineNumber-foreground: #6e7681;--ch-t-input-background: #0d1117;--ch-t-input-foreground: #c9d1d9;--ch-t-input-border: #30363d;--ch-t-icon-foreground: #8b949e;--ch-t-sideBar-background: #010409;--ch-t-sideBar-foreground: #c9d1d9;--ch-t-sideBar-border: #30363d;--ch-t-list-activeSelectionBackground: #6e768166;--ch-t-list-activeSelectionForeground: #c9d1d9;--ch-t-list-hoverBackground: #6e76811a;--ch-t-list-hoverForeground: #c9d1d9; }'}}),"\n","\n",(0,s.jsx)(t.p,{children:"This tutorial demonstrates how you can use Langflow to create a chatbot application that uses Retrieval Augmented Generation (RAG) to embed your data as vectors in a vector database, and then chat with the data."}),"\n",(0,s.jsx)(t.h2,{id:"prerequisites",children:"Prerequisites"}),"\n",(0,s.jsxs)(t.ul,{children:["\n",(0,s.jsx)(t.li,{children:(0,s.jsx)(t.a,{href:"/get-started-installation",children:"Install and start Langflow"})}),"\n",(0,s.jsxs)(t.li,{children:["Create a ",(0,s.jsx)(t.a,{href:"/api-keys-and-authentication",children:"Langflow API key"})]}),"\n",(0,s.jsxs)(t.li,{children:["Create an ",(0,s.jsx)(t.a,{href:"https://platform.openai.com/api-keys",children:"OpenAI API key"})]}),"\n",(0,s.jsxs)(t.li,{children:["Install the ",(0,s.jsx)(t.a,{href:"/typescript-client",children:"Langflow JavaScript client"})]}),"\n",(0,s.jsx)(t.li,{children:"Be familiar with vector search concepts and applications, such as vector databases and RAG"}),"\n"]}),"\n",(0,s.jsx)(t.h2,{id:"create-a-vector-rag-flow",children:"Create a vector RAG flow"}),"\n",(0,s.jsxs)(t.ol,{children:["\n",(0,s.jsxs)(t.li,{children:["\n",(0,s.jsxs)(t.p,{children:["In Langflow, click ",(0,s.jsx)(t.strong,{children:"New Flow"}),", and then select the ",(0,s.jsx)(t.strong,{children:"Vector Store RAG"})," template."]}),"\n",(0,s.jsxs)(n,{children:[(0,s.jsx)("summary",{children:"About the Vector Store RAG template"}),(0,s.jsx)(t.p,{children:"This template has two flows."}),(0,s.jsxs)(t.p,{children:["The ",(0,s.jsx)(t.strong,{children:"Load Data Flow"})," populates a vector store with data from a file.\nThis data is used to respond to queries submitted to the ",(0,s.jsx)(t.strong,{children:"Retriever Flow"}),"."]}),(0,s.jsxs)(t.p,{children:["Specifically, the ",(0,s.jsx)(t.strong,{children:"Load Data Flow"})," ingests data from a local file, splits the data into chunks, loads and indexes the data in your vector database, and then computes embeddings for the chunks. The embeddings are also stored with the loaded data. This flow only needs to run when you need to load data into your vector database."]}),(0,s.jsxs)(t.p,{children:["The ",(0,s.jsx)(t.strong,{children:"Retriever Flow"})," receives chat input, generates an embedding for the input, and then uses several components to reconstruct chunks into text and generate a response by comparing the new embedding to the stored embeddings to find similar data."]})]}),"\n"]}),"\n",(0,s.jsxs)(t.li,{children:["\n",(0,s.jsxs)(t.p,{children:["Add your ",(0,s.jsx)(t.strong,{children:"OpenAI"})," API key to both ",(0,s.jsx)(t.strong,{children:"OpenAI Embeddings"})," components."]}),"\n"]}),"\n",(0,s.jsxs)(t.li,{children:["\n",(0,s.jsxs)(t.p,{children:["Optional: Replace both ",(0,s.jsx)(t.strong,{children:"Astra DB"})," vector store components with a ",(0,s.jsx)(t.strong,{children:"Chroma DB"})," or another vector store component of your choice.\nThis tutorial uses Chroma DB."]}),"\n",(0,s.jsxs)(t.p,{children:["The ",(0,s.jsx)(t.strong,{children:"Load Data Flow"})," should have ",(0,s.jsx)(t.strong,{children:"Read File"}),", ",(0,s.jsx)(t.strong,{children:"Split Text"}),", ",(0,s.jsx)(t.strong,{children:"Embedding Model"}),", vector store (such as ",(0,s.jsx)(t.strong,{children:"Chroma DB"}),"), and ",(0,s.jsx)(t.strong,{children:"Chat Output"})," components:"]}),"\n",(0,s.jsx)(t.p,{children:(0,s.jsx)(t.img,{alt:"File loader chat flow",src:e(59403).A+"",width:"4000",height:"2512"})}),"\n",(0,s.jsxs)(t.p,{children:["The ",(0,s.jsx)(t.strong,{children:"Retriever Flow"})," should have ",(0,s.jsx)(t.strong,{children:"Chat Input"}),", ",(0,s.jsx)(t.strong,{children:"Embedding Model"}),", vector store, ",(0,s.jsx)(t.strong,{children:"Parser"}),", ",(0,s.jsx)(t.strong,{children:"Prompt"}),", ",(0,s.jsx)(t.strong,{children:"Language Model"}),", and ",(0,s.jsx)(t.strong,{children:"Chat Output"})," components:"]}),"\n",(0,s.jsx)(t.p,{children:(0,s.jsx)(t.img,{alt:"Chat with RAG flow",src:e(96973).A+"",width:"4000",height:"1324"})}),"\n",(0,s.jsx)(t.p,{children:"The flows are ready to use.\nContinue the tutorial to learn how to use the loading flow to load data into your vector store, and then call the chat flow in a chatbot application."}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(t.h2,{id:"load-data-and-generate-embeddings",children:"Load data and generate embeddings"}),"\n",(0,s.jsxs)(t.p,{children:["To load data and generate embeddings, you can use the visual editor or the ",(0,s.jsx)(t.code,{children:"/v2/files"})," endpoint."]}),"\n",(0,s.jsx)(t.p,{children:"The visual editor option is simpler, but it is only recommended for scenarios where the user who created the flow is the same user who loads data into the database."}),"\n",(0,s.jsx)(t.p,{children:"In situations where many users load data or you need to load data programmatically, use the Langflow API option."}),"\n",(0,s.jsxs)(a.A,{children:[(0,s.jsx)(p.A,{value:"visual",label:"Visual editor",default:!0,children:(0,s.jsxs)(t.ol,{children:["\n",(0,s.jsxs)(t.li,{children:["In your RAG chatbot flow, click the ",(0,s.jsx)(t.strong,{children:"Read File"})," component, and then click ",(0,s.jsx)(t.strong,{children:"File"}),"."]}),"\n",(0,s.jsxs)(t.li,{children:["Select the local file you want to upload, and then click ",(0,s.jsx)(t.strong,{children:"Open"}),".\nThe file is loaded to your Langflow server."]}),"\n",(0,s.jsxs)(t.li,{children:["To load the data into your vector database, click the vector store component, and then click ",(0,s.jsx)(c.A,{name:"Play","aria-hidden":"true"})," ",(0,s.jsx)(t.strong,{children:"Run component"})," to run the selected component and all prior dependent components."]}),"\n"]})}),(0,s.jsxs)(p.A,{value:"API",label:"Langflow API",children:[(0,s.jsxs)(t.p,{children:["To load data programmatically, use the ",(0,s.jsx)(t.code,{children:"/v2/files/"})," and ",(0,s.jsx)(t.code,{children:"/v1/run/$FLOW_ID"})," endpoints. The first endpoint loads a file to your Langflow server, and then returns an uploaded file path. The second endpoint runs the ",(0,s.jsx)(t.strong,{children:"Load Data Flow"}),", referencing the uploaded file path, to chunk, embed, and load the data into the vector store."]}),(0,s.jsxs)(t.p,{children:["The following script demonstrates this process.\nFor help with creating this script, use the ",(0,s.jsx)(t.a,{href:"https://langflow-file-upload-examples.21cgwws14kdz.us-east.codeengine.appdomain.cloud/",children:"Langflow File Upload Utility"}),"."]}),(0,s.jsx)(u.Code,{codeConfig:y,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"// Node 18+ example using global fetch, FormData, and Blob",props:{style:{color:"#8B949E"}}}]},{tokens:[{content:"import",props:{style:{color:"#FF7B72"}}},{content:" fs ",props:{style:{color:"#C9D1D9"}}},{content:"from ",props:{style:{color:"#FF7B72"}}},{content:"'fs/promises'",props:{style:{color:"#A5D6FF"}}},{content:";",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"// 1. Prepare the form data with the file to upload",props:{style:{color:"#8B949E"}}}]},{tokens:[{content:"const ",props:{style:{color:"#FF7B72"}}},{content:"fileBuffer ",props:{style:{color:"#79C0FF"}}},{content:"= await",props:{style:{color:"#FF7B72"}}},{content:" fs.",props:{style:{color:"#C9D1D9"}}},{content:"readFile",props:{style:{color:"#D2A8FF"}}},{content:"(",props:{style:{color:"#C9D1D9"}}},{content:"'FILE_NAME'",props:{style:{color:"#A5D6FF"}}},{content:");",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"const ",props:{style:{color:"#FF7B72"}}},{content:"data ",props:{style:{color:"#79C0FF"}}},{content:"= new ",props:{style:{color:"#FF7B72"}}},{content:"FormData",props:{style:{color:"#D2A8FF"}}},{content:"();",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"data.",props:{style:{color:"#C9D1D9"}}},{content:"append",props:{style:{color:"#D2A8FF"}}},{content:"(",props:{style:{color:"#C9D1D9"}}},{content:"'file'",props:{style:{color:"#A5D6FF"}}},{content:", ",props:{style:{color:"#C9D1D9"}}},{content:"new ",props:{style:{color:"#FF7B72"}}},{content:"Blob",props:{style:{color:"#D2A8FF"}}},{content:"([fileBuffer]), ",props:{style:{color:"#C9D1D9"}}},{content:"'FILE_NAME'",props:{style:{color:"#A5D6FF"}}},{content:");",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"const ",props:{style:{color:"#FF7B72"}}},{content:"headers ",props:{style:{color:"#79C0FF"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:" { ",props:{style:{color:"#C9D1D9"}}},{content:"'x-api-key'",props:{style:{color:"#A5D6FF"}}},{content:": ",props:{style:{color:"#C9D1D9"}}},{content:"'LANGFLOW_API_KEY'",props:{style:{color:"#A5D6FF"}}},{content:" };",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"// 2. Upload the file to Langflow",props:{style:{color:"#8B949E"}}}]},{tokens:[{content:"const ",props:{style:{color:"#FF7B72"}}},{content:"uploadRes ",props:{style:{color:"#79C0FF"}}},{content:"= await ",props:{style:{color:"#FF7B72"}}},{content:"fetch",props:{style:{color:"#D2A8FF"}}},{content:"(",props:{style:{color:"#C9D1D9"}}},{content:"'LANGFLOW_SERVER_ADDRESS/api/v2/files/'",props:{style:{color:"#A5D6FF"}}},{content:", {",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" method: ",props:{style:{color:"#C9D1D9"}}},{content:"'POST'",props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" headers,",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" body: data",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"});",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"const ",props:{style:{color:"#FF7B72"}}},{content:"uploadData ",props:{style:{color:"#79C0FF"}}},{content:"= await",props:{style:{color:"#FF7B72"}}},{content:" uploadRes.",props:{style:{color:"#C9D1D9"}}},{content:"json",props:{style:{color:"#D2A8FF"}}},{content:"();",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"const ",props:{style:{color:"#FF7B72"}}},{content:"uploadedPath ",props:{style:{color:"#79C0FF"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:" uploadData.path;",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"// 3. Call the Langflow run endpoint with the uploaded file path",props:{style:{color:"#8B949E"}}}]},{tokens:[{content:"const ",props:{style:{color:"#FF7B72"}}},{content:"payload ",props:{style:{color:"#79C0FF"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:" {",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" input_value: ",props:{style:{color:"#C9D1D9"}}},{content:'"Analyze this file"',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" output_type: ",props:{style:{color:"#C9D1D9"}}},{content:'"chat"',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" input_type: ",props:{style:{color:"#C9D1D9"}}},{content:'"text"',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" tweaks: {",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" 'FILE_COMPONENT_NAME'",props:{style:{color:"#A5D6FF"}}},{content:": {",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" path: uploadedPath",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" }",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" }",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"};",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"const ",props:{style:{color:"#FF7B72"}}},{content:"runRes ",props:{style:{color:"#79C0FF"}}},{content:"= await ",props:{style:{color:"#FF7B72"}}},{content:"fetch",props:{style:{color:"#D2A8FF"}}},{content:"(",props:{style:{color:"#C9D1D9"}}},{content:"'LANGFLOW_SERVER_ADDRESS/api/v1/run/FLOW_ID'",props:{style:{color:"#A5D6FF"}}},{content:", {",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" method: ",props:{style:{color:"#C9D1D9"}}},{content:"'POST'",props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" headers: { ",props:{style:{color:"#C9D1D9"}}},{content:"'Content-Type'",props:{style:{color:"#A5D6FF"}}},{content:": ",props:{style:{color:"#C9D1D9"}}},{content:"'application/json'",props:{style:{color:"#A5D6FF"}}},{content:", ",props:{style:{color:"#C9D1D9"}}},{content:"'x-api-key'",props:{style:{color:"#A5D6FF"}}},{content:": ",props:{style:{color:"#C9D1D9"}}},{content:"'LANGFLOW_API_KEY'",props:{style:{color:"#A5D6FF"}}},{content:" },",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" body: ",props:{style:{color:"#C9D1D9"}}},{content:"JSON",props:{style:{color:"#79C0FF"}}},{content:".",props:{style:{color:"#C9D1D9"}}},{content:"stringify",props:{style:{color:"#D2A8FF"}}},{content:"(payload)",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"});",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"const ",props:{style:{color:"#FF7B72"}}},{content:"langflowData ",props:{style:{color:"#79C0FF"}}},{content:"= await",props:{style:{color:"#FF7B72"}}},{content:" runRes.",props:{style:{color:"#C9D1D9"}}},{content:"json",props:{style:{color:"#D2A8FF"}}},{content:"();",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"// Output only the message",props:{style:{color:"#8B949E"}}}]},{tokens:[{content:"console.",props:{style:{color:"#C9D1D9"}}},{content:"log",props:{style:{color:"#D2A8FF"}}},{content:"(langflowData.outputs?.[",props:{style:{color:"#C9D1D9"}}},{content:"0",props:{style:{color:"#79C0FF"}}},{content:"]?.outputs?.[",props:{style:{color:"#C9D1D9"}}},{content:"0",props:{style:{color:"#79C0FF"}}},{content:"]?.results?.message?.data?.text);",props:{style:{color:"#C9D1D9"}}}]}],lang:"js"},annotations:[]}]})]})]}),"\n",(0,s.jsx)(t.p,{children:"When the flow runs, the flow ingests the selected file, chunks the data, loads the data into the vector store database, and then generates embeddings for the chunks, which are also stored in the vector store."}),"\n",(0,s.jsx)(t.p,{children:"Your database now contains data with vector embeddings that an LLM can use as context to respond to queries, as demonstrated in the next section of the tutorial."}),"\n",(0,s.jsx)(t.h2,{id:"chat-with-your-flow-from-a-javascript-application",children:"Chat with your flow from a JavaScript application"}),"\n",(0,s.jsxs)(t.p,{children:["To chat with the data in your vector database, create a chatbot application that runs the ",(0,s.jsx)(t.strong,{children:"Retriever Flow"})," programmatically."]}),"\n",(0,s.jsx)(t.p,{children:"This tutorial uses JavaScript for demonstration purposes."}),"\n",(0,s.jsxs)(t.ol,{children:["\n",(0,s.jsxs)(t.li,{children:["\n",(0,s.jsx)(t.p,{children:"To construct the chatbot, gather the following information:"}),"\n",(0,s.jsxs)(t.ul,{children:["\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.code,{children:"LANGFLOW_SERVER_ADDRESS"}),": Your Langflow server's domain. The default value is ",(0,s.jsx)(t.code,{children:"127.0.0.1:7860"}),". You can get this value from the code snippets on your flow's ",(0,s.jsxs)(t.a,{href:"/concepts-publish#api-access",children:[(0,s.jsx)(t.strong,{children:"API access"})," pane"]}),"."]}),"\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.code,{children:"FLOW_ID"}),": Your flow's UUID or custom endpoint name. You can get this value from the code snippets on your flow's ",(0,s.jsxs)(t.a,{href:"/concepts-publish#api-access",children:[(0,s.jsx)(t.strong,{children:"API access"})," pane"]}),"."]}),"\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.code,{children:"LANGFLOW_API_KEY"}),": A valid ",(0,s.jsx)(t.a,{href:"/api-keys-and-authentication",children:"Langflow API key"}),"."]}),"\n"]}),"\n"]}),"\n",(0,s.jsxs)(t.li,{children:["\n",(0,s.jsx)(t.p,{children:"Copy the following script into a JavaScript file, and then replace the placeholders with the information you gathered in the previous step:"}),"\n",(0,s.jsx)(u.Code,{codeConfig:y,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"const ",props:{style:{color:"#FF7B72"}}},{content:"readline ",props:{style:{color:"#79C0FF"}}},{content:"= ",props:{style:{color:"#FF7B72"}}},{content:"require",props:{style:{color:"#D2A8FF"}}},{content:"(",props:{style:{color:"#C9D1D9"}}},{content:"'readline'",props:{style:{color:"#A5D6FF"}}},{content:");",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"const",props:{style:{color:"#FF7B72"}}},{content:" { ",props:{style:{color:"#C9D1D9"}}},{content:"LangflowClient",props:{style:{color:"#79C0FF"}}},{content:" } ",props:{style:{color:"#C9D1D9"}}},{content:"= ",props:{style:{color:"#FF7B72"}}},{content:"require",props:{style:{color:"#D2A8FF"}}},{content:"(",props:{style:{color:"#C9D1D9"}}},{content:"'@datastax/langflow-client'",props:{style:{color:"#A5D6FF"}}},{content:");",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"# ",props:{style:{color:"#C9D1D9"}}},{content:"pragma",props:{style:{color:"#FFA657"}}},{content:": allowlist nextline secret",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"const ",props:{style:{color:"#FF7B72"}}},{content:"API_KEY ",props:{style:{color:"#79C0FF"}}},{content:"= ",props:{style:{color:"#FF7B72"}}},{content:"'LANGFLOW_API_KEY'",props:{style:{color:"#A5D6FF"}}},{content:";",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"const ",props:{style:{color:"#FF7B72"}}},{content:"SERVER ",props:{style:{color:"#79C0FF"}}},{content:"= ",props:{style:{color:"#FF7B72"}}},{content:"'LANGFLOW_SERVER_ADDRESS'",props:{style:{color:"#A5D6FF"}}},{content:";",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"const ",props:{style:{color:"#FF7B72"}}},{content:"FLOW_ID ",props:{style:{color:"#79C0FF"}}},{content:"= ",props:{style:{color:"#FF7B72"}}},{content:"'FLOW_ID'",props:{style:{color:"#A5D6FF"}}},{content:";",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"const ",props:{style:{color:"#FF7B72"}}},{content:"rl ",props:{style:{color:"#79C0FF"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:" readline.",props:{style:{color:"#C9D1D9"}}},{content:"createInterface",props:{style:{color:"#D2A8FF"}}},{content:"({ input: process.stdin, output: process.stdout });",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"// Initialize the Langflow client",props:{style:{color:"#8B949E"}}}]},{tokens:[{content:"const ",props:{style:{color:"#FF7B72"}}},{content:"client ",props:{style:{color:"#79C0FF"}}},{content:"= new ",props:{style:{color:"#FF7B72"}}},{content:"LangflowClient",props:{style:{color:"#D2A8FF"}}},{content:"({",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" baseUrl: ",props:{style:{color:"#C9D1D9"}}},{content:"SERVER",props:{style:{color:"#79C0FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" apiKey: ",props:{style:{color:"#C9D1D9"}}},{content:"API_KEY",props:{style:{color:"#79C0FF"}}}]},{tokens:[{content:"});",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"async function ",props:{style:{color:"#FF7B72"}}},{content:"sendMessage",props:{style:{color:"#D2A8FF"}}},{content:"(",props:{style:{color:"#C9D1D9"}}},{content:"message",props:{style:{color:"#FFA657"}}},{content:") {",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" try",props:{style:{color:"#FF7B72"}}},{content:" {",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" const ",props:{style:{color:"#FF7B72"}}},{content:"response ",props:{style:{color:"#79C0FF"}}},{content:"= await",props:{style:{color:"#FF7B72"}}},{content:" client.",props:{style:{color:"#C9D1D9"}}},{content:"flow",props:{style:{color:"#D2A8FF"}}},{content:"(",props:{style:{color:"#C9D1D9"}}},{content:"FLOW_ID",props:{style:{color:"#79C0FF"}}},{content:").",props:{style:{color:"#C9D1D9"}}},{content:"run",props:{style:{color:"#D2A8FF"}}},{content:"(message, {",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" session_id: ",props:{style:{color:"#C9D1D9"}}},{content:"'user_1'",props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:" });",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" // Use the convenience method to get the chat output text",props:{style:{color:"#8B949E"}}}]},{tokens:[{content:" return",props:{style:{color:"#FF7B72"}}},{content:" response.",props:{style:{color:"#C9D1D9"}}},{content:"chatOutputText",props:{style:{color:"#D2A8FF"}}},{content:"() ",props:{style:{color:"#C9D1D9"}}},{content:"|| ",props:{style:{color:"#FF7B72"}}},{content:"'No response'",props:{style:{color:"#A5D6FF"}}},{content:";",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" } ",props:{style:{color:"#C9D1D9"}}},{content:"catch",props:{style:{color:"#FF7B72"}}},{content:" (error) {",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" return ",props:{style:{color:"#FF7B72"}}},{content:"`Error: ${",props:{style:{color:"#A5D6FF"}}},{content:"error",props:{style:{color:"#C9D1D9"}}},{content:".",props:{style:{color:"#A5D6FF"}}},{content:"message",props:{style:{color:"#C9D1D9"}}},{content:"}`",props:{style:{color:"#A5D6FF"}}},{content:";",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" }",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"}",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"function ",props:{style:{color:"#FF7B72"}}},{content:"chat",props:{style:{color:"#D2A8FF"}}},{content:"() {",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" console.",props:{style:{color:"#C9D1D9"}}},{content:"log",props:{style:{color:"#D2A8FF"}}},{content:"(",props:{style:{color:"#C9D1D9"}}},{content:'\'\ud83e\udd16 Langflow RAG Chatbot (type "quit" to exit)',props:{style:{color:"#A5D6FF"}}},{content:"\\n",props:{style:{color:"#79C0FF"}}},{content:"'",props:{style:{color:"#A5D6FF"}}},{content:");",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" const ",props:{style:{color:"#FF7B72"}}},{content:"ask ",props:{style:{color:"#D2A8FF"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:" () ",props:{style:{color:"#C9D1D9"}}},{content:"=>",props:{style:{color:"#FF7B72"}}},{content:" {",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" rl.",props:{style:{color:"#C9D1D9"}}},{content:"question",props:{style:{color:"#D2A8FF"}}},{content:"(",props:{style:{color:"#C9D1D9"}}},{content:"'\ud83d\udc64 You: '",props:{style:{color:"#A5D6FF"}}},{content:", ",props:{style:{color:"#C9D1D9"}}},{content:"async",props:{style:{color:"#FF7B72"}}},{content:" (",props:{style:{color:"#C9D1D9"}}},{content:"input",props:{style:{color:"#FFA657"}}},{content:") ",props:{style:{color:"#C9D1D9"}}},{content:"=>",props:{style:{color:"#FF7B72"}}},{content:" {",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" if",props:{style:{color:"#FF7B72"}}},{content:" ([",props:{style:{color:"#C9D1D9"}}},{content:"'quit'",props:{style:{color:"#A5D6FF"}}},{content:", ",props:{style:{color:"#C9D1D9"}}},{content:"'exit'",props:{style:{color:"#A5D6FF"}}},{content:", ",props:{style:{color:"#C9D1D9"}}},{content:"'bye'",props:{style:{color:"#A5D6FF"}}},{content:"].",props:{style:{color:"#C9D1D9"}}},{content:"includes",props:{style:{color:"#D2A8FF"}}},{content:"(input.",props:{style:{color:"#C9D1D9"}}},{content:"trim",props:{style:{color:"#D2A8FF"}}},{content:"().",props:{style:{color:"#C9D1D9"}}},{content:"toLowerCase",props:{style:{color:"#D2A8FF"}}},{content:"())) {",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" console.",props:{style:{color:"#C9D1D9"}}},{content:"log",props:{style:{color:"#D2A8FF"}}},{content:"(",props:{style:{color:"#C9D1D9"}}},{content:"'\ud83d\udc4b Goodbye!'",props:{style:{color:"#A5D6FF"}}},{content:");",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" rl.",props:{style:{color:"#C9D1D9"}}},{content:"close",props:{style:{color:"#D2A8FF"}}},{content:"();",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" return",props:{style:{color:"#FF7B72"}}},{content:";",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" }",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" const ",props:{style:{color:"#FF7B72"}}},{content:"response ",props:{style:{color:"#79C0FF"}}},{content:"= await ",props:{style:{color:"#FF7B72"}}},{content:"sendMessage",props:{style:{color:"#D2A8FF"}}},{content:"(input.",props:{style:{color:"#C9D1D9"}}},{content:"trim",props:{style:{color:"#D2A8FF"}}},{content:"());",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" console.",props:{style:{color:"#C9D1D9"}}},{content:"log",props:{style:{color:"#D2A8FF"}}},{content:"(",props:{style:{color:"#C9D1D9"}}},{content:"`\ud83e\udd16 Assistant: ${",props:{style:{color:"#A5D6FF"}}},{content:"response",props:{style:{color:"#C9D1D9"}}},{content:"}",props:{style:{color:"#A5D6FF"}}},{content:"\\n",props:{style:{color:"#79C0FF"}}},{content:"`",props:{style:{color:"#A5D6FF"}}},{content:");",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" ask",props:{style:{color:"#D2A8FF"}}},{content:"();",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" });",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" };",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" ask",props:{style:{color:"#D2A8FF"}}},{content:"();",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"}",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"chat",props:{style:{color:"#D2A8FF"}}},{content:"();",props:{style:{color:"#C9D1D9"}}}]}],lang:"js"},annotations:[]}]}),"\n",(0,s.jsxs)(t.p,{children:["The script creates a Node application that chats with the content in your vector database, using the ",(0,s.jsx)(t.code,{children:"chat"})," input and output types to communicate with your flow.\nChat maintains ongoing conversation context across multiple messages. If you used ",(0,s.jsx)(t.code,{children:"text"})," type inputs and outputs, each request is a standalone text string."]}),"\n",(0,s.jsx)(t.admonition,{type:"tip",children:(0,s.jsxs)(t.p,{children:["The ",(0,s.jsx)(t.a,{href:"/typescript-client",children:"Langflow TypeScript client"})," has a ",(0,s.jsx)(t.code,{children:"chatOutputText()"})," convenience method that simplifies working with Langflow's complex JSON response structure.\nInstead of manually navigating through multiple levels of nested objects with ",(0,s.jsx)(t.code,{children:"data.outputs[0].outputs[0].results.message.data.text"}),", the client automatically extracts the message text and handles potentially undefined values gracefully."]})}),"\n"]}),"\n",(0,s.jsxs)(t.li,{children:["\n",(0,s.jsx)(t.p,{children:"Save and run the script to send the requests and test the flow."}),"\n",(0,s.jsxs)(n,{children:[(0,s.jsx)("summary",{children:"Result"}),(0,s.jsx)(t.p,{children:"The following is an example response from this tutorial's flow. Due to the nature of LLMs and variations in your inputs, your response might be different."}),(0,s.jsx)(u.Code,{codeConfig:y,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"\ud83d\udc64 You: Do you have any documents about engines?",props:{}}]},{tokens:[{content:"\ud83e\udd16 Assistant: Yes, the provided text contains several warnings and guidelines related to engine installation, maintenance, and selection. It emphasizes the importance of using the correct engine for specific applications, ensuring all components are in good condition, and following safety precautions to prevent fire or explosion. If you need more specific information or details, please let me know!",props:{}}]},{tokens:[{content:"",props:{}}]},{tokens:[{content:"\ud83d\udc64 You: It should be about a Briggs and Stratton engine.",props:{}}]},{tokens:[{content:"\ud83e\udd16 Assistant: The text provides important safety and installation guidelines for Briggs & Stratton engines. It emphasizes that these engines should not be used on 3-wheel All-Terrain Vehicles (ATVs), motor bikes, aircraft products, or vehicles intended for competitive events, as such uses are not approved by Briggs & Stratton.",props:{}}]},{tokens:[{content:"",props:{}}]},{tokens:[{content:"If you have any specific questions about Briggs & Stratton engines or need further information, feel free to ask!",props:{}}]}],lang:"text"},annotations:[]}]})]}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(t.h2,{id:"next-steps",children:"Next steps"}),"\n",(0,s.jsx)(t.p,{children:"For more information on building or extending this tutorial, see the following:"}),"\n",(0,s.jsxs)(t.ul,{children:["\n",(0,s.jsx)(t.li,{children:(0,s.jsx)(t.a,{href:"/mcp-server",children:"Model Context Protocol (MCP) servers"})}),"\n",(0,s.jsx)(t.li,{children:(0,s.jsx)(t.a,{href:"/deployment-overview",children:"Langflow deployment overview"})}),"\n"]})]})}function f(o={}){const{wrapper:t}={...(0,r.R)(),...o.components};return t?(0,s.jsx)(t,{...o,children:(0,s.jsx)(F,{...o})}):F(o)}function g(o,t){throw new Error("Expected "+(t?"component":"object")+" `"+o+"` to be defined: you likely forgot to import, pass, or provide it.")}},96973:(o,t,e)=>{e.d(t,{A:()=>n});const n=e.p+"assets/images/tutorial-chatbot-chat-flow-af7257d77ff0259ab1a0980641d464ce.png"}}]); \ No newline at end of file diff --git a/assets/js/2fc7e024.5cdd44e5.js b/assets/js/2fc7e024.5cdd44e5.js deleted file mode 100644 index 796e17acd4..0000000000 --- a/assets/js/2fc7e024.5cdd44e5.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(globalThis.webpackChunklangflow_docs=globalThis.webpackChunklangflow_docs||[]).push([[1408],{47617:(e,o,t)=>{t.d(o,{A:()=>n});const n=t.p+"assets/images/tutorial-chat-file-loader-099f2f4c5e4343412557b1a78c4b9209.png"},57844:(e,o,t)=>{t.r(o),t.d(o,{CH:()=>d,assets:()=>a,chCodeConfig:()=>h,contentTitle:()=>p,default:()=>f,frontMatter:()=>i,metadata:()=>n,toc:()=>u});const n=JSON.parse('{"id":"Tutorials/chat-with-files","title":"Create a chatbot that can ingest files","description":"This tutorial shows you how to build a chatbot that can read and answer questions about files you upload, such as meeting notes or job applications.","source":"@site/docs/Tutorials/chat-with-files.mdx","sourceDirName":"Tutorials","slug":"/chat-with-files","permalink":"/chat-with-files","draft":false,"unlisted":false,"tags":[],"version":"current","frontMatter":{"title":"Create a chatbot that can ingest files","slug":"/chat-with-files"},"sidebar":"docs","previous":{"title":"Create a vector RAG chatbot","permalink":"/chat-with-rag"},"next":{"title":"Connect applications to agents","permalink":"/agent-tutorial"}}');var s=t(74848),r=t(28453),l=t(24754),c=t(40619);const i={title:"Create a chatbot that can ingest files",slug:"/chat-with-files"},p=void 0,a={},d={annotations:l.hk,Code:l.Cy},h={staticMediaQuery:"not screen, (max-width: 768px)",lineNumbers:!0,showCopyButton:!0,themeName:"github-dark"},u=[{value:"Prerequisites",id:"prerequisites",level:2},{value:"Create a flow that accepts file input",id:"create-a-flow-that-accepts-file-input",level:2},{value:"Send requests to your flow from a Python application",id:"send-requests-to-your-flow-from-a-python-application",level:2},{value:"Next steps",id:"next-steps",level:2},{value:"Process multiple files loaded at runtime",id:"process-multiple-files-loaded-at-runtime",level:3},{value:"Upload external files at runtime",id:"upload-external-files-at-runtime",level:3},{value:"Preload files outside the chat session",id:"preload-files-outside-the-chat-session",level:3}];function y(e){const o={a:"a",admonition:"admonition",code:"code",h2:"h2",h3:"h3",img:"img",li:"li",ol:"ol",p:"p",strong:"strong",ul:"ul",...(0,r.R)(),...e.components},{Details:n}=o;return d||D("CH",!1),d.Code||D("CH.Code",!0),n||D("Details",!0),(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)("style",{dangerouslySetInnerHTML:{__html:'[data-ch-theme="github-dark"] { --ch-t-colorScheme: dark;--ch-t-foreground: #c9d1d9;--ch-t-background: #0d1117;--ch-t-lighter-inlineBackground: #0d1117e6;--ch-t-editor-background: #0d1117;--ch-t-editor-foreground: #c9d1d9;--ch-t-editor-lineHighlightBackground: #6e76811a;--ch-t-editor-rangeHighlightBackground: #ffffff0b;--ch-t-editor-infoForeground: #3794FF;--ch-t-editor-selectionBackground: #264F78;--ch-t-focusBorder: #1f6feb;--ch-t-tab-activeBackground: #0d1117;--ch-t-tab-activeForeground: #c9d1d9;--ch-t-tab-inactiveBackground: #010409;--ch-t-tab-inactiveForeground: #8b949e;--ch-t-tab-border: #30363d;--ch-t-tab-activeBorder: #0d1117;--ch-t-editorGroup-border: #30363d;--ch-t-editorGroupHeader-tabsBackground: #010409;--ch-t-editorLineNumber-foreground: #6e7681;--ch-t-input-background: #0d1117;--ch-t-input-foreground: #c9d1d9;--ch-t-input-border: #30363d;--ch-t-icon-foreground: #8b949e;--ch-t-sideBar-background: #010409;--ch-t-sideBar-foreground: #c9d1d9;--ch-t-sideBar-border: #30363d;--ch-t-list-activeSelectionBackground: #6e768166;--ch-t-list-activeSelectionForeground: #c9d1d9;--ch-t-list-hoverBackground: #6e76811a;--ch-t-list-hoverForeground: #c9d1d9; }'}}),"\n","\n",(0,s.jsx)(o.p,{children:"This tutorial shows you how to build a chatbot that can read and answer questions about files you upload, such as meeting notes or job applications."}),"\n",(0,s.jsx)(o.p,{children:"For example, you could upload a contract and ask, \u201cWhat are the termination clauses in this agreement?\u201d Or upload a resume and ask, \u201cDoes this candidate have experience with marketing analytics?\u201d"}),"\n",(0,s.jsx)(o.p,{children:"The main focus of this tutorial is to show you how to provide files as input to a Langflow flow, so your chatbot can use the content of those files in its responses."}),"\n",(0,s.jsx)(o.h2,{id:"prerequisites",children:"Prerequisites"}),"\n",(0,s.jsxs)(o.ul,{children:["\n",(0,s.jsx)(o.li,{children:(0,s.jsx)(o.a,{href:"/get-started-installation",children:"Install and start Langflow"})}),"\n",(0,s.jsxs)(o.li,{children:["Create a ",(0,s.jsx)(o.a,{href:"/api-keys-and-authentication",children:"Langflow API key"})]}),"\n",(0,s.jsxs)(o.li,{children:["Create an ",(0,s.jsx)(o.a,{href:"https://platform.openai.com/api-keys",children:"OpenAI API key"})]}),"\n"]}),"\n",(0,s.jsx)(o.p,{children:"This tutorial uses an OpenAI LLM. If you want to use a different provider, you need a valid credential for that provider."}),"\n",(0,s.jsx)(o.h2,{id:"create-a-flow-that-accepts-file-input",children:"Create a flow that accepts file input"}),"\n",(0,s.jsxs)(o.p,{children:["To ingest files, your flow must have a ",(0,s.jsx)(o.strong,{children:"Read File"})," component attached to a component that receives input, such as a ",(0,s.jsx)(o.strong,{children:"Prompt Template"})," or ",(0,s.jsx)(o.strong,{children:"Agent"})," component."]}),"\n",(0,s.jsxs)(o.p,{children:["The following steps modify the ",(0,s.jsx)(o.strong,{children:"Basic Prompting"})," template to accept file input:"]}),"\n",(0,s.jsxs)(o.ol,{children:["\n",(0,s.jsxs)(o.li,{children:["\n",(0,s.jsxs)(o.p,{children:["In Langflow, click ",(0,s.jsx)(o.strong,{children:"New Flow"}),", and then select the ",(0,s.jsx)(o.strong,{children:"Basic Prompting"})," template."]}),"\n"]}),"\n",(0,s.jsxs)(o.li,{children:["\n",(0,s.jsxs)(o.p,{children:["In the ",(0,s.jsx)(o.strong,{children:"Language Model"})," component, enter your OpenAI API key."]}),"\n",(0,s.jsxs)(o.p,{children:["If you want to use a different provider or model, edit the ",(0,s.jsx)(o.strong,{children:"Model Provider"}),", ",(0,s.jsx)(o.strong,{children:"Model Name"}),", and ",(0,s.jsx)(o.strong,{children:"API Key"})," fields accordingly."]}),"\n"]}),"\n",(0,s.jsxs)(o.li,{children:["\n",(0,s.jsxs)(o.p,{children:["To verify that your API key is valid, click ",(0,s.jsx)(c.A,{name:"Play","aria-hidden":"true"})," ",(0,s.jsx)(o.strong,{children:"Playground"}),", and then ask the LLM a question.\nThe LLM should respond according to the specifications in the ",(0,s.jsx)(o.strong,{children:"Prompt Template"})," component's ",(0,s.jsx)(o.strong,{children:"Template"})," field."]}),"\n"]}),"\n",(0,s.jsxs)(o.li,{children:["\n",(0,s.jsxs)(o.p,{children:["Exit the ",(0,s.jsx)(o.strong,{children:"Playground"}),", and then modify the ",(0,s.jsx)(o.strong,{children:"Prompt Template"})," component to accept file input in addition to chat input.\nTo do this, edit the ",(0,s.jsx)(o.strong,{children:"Template"})," field, and then replace the default prompt with the following text:"]}),"\n",(0,s.jsx)(d.Code,{codeConfig:h,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"ChatInput:",props:{}}]},{tokens:[{content:"{chat-input}",props:{}}]},{tokens:[{content:"File:",props:{}}]},{tokens:[{content:"{file}",props:{}}]}],lang:"text"},annotations:[]}]}),"\n",(0,s.jsxs)(o.admonition,{type:"tip",children:[(0,s.jsxs)(o.p,{children:["You can use any string to name your template variables.\nThese strings become the names of the fields (input ports) on the ",(0,s.jsx)(o.strong,{children:"Prompt Template"})," component."]}),(0,s.jsxs)(o.p,{children:["For this tutorial, the variables are named after the components that connect to them: ",(0,s.jsx)(o.strong,{children:"chat-input"})," for the ",(0,s.jsx)(o.strong,{children:"Chat Input"})," component and ",(0,s.jsx)(o.strong,{children:"file"})," for the ",(0,s.jsx)(o.strong,{children:"Read File"})," component."]})]}),"\n"]}),"\n",(0,s.jsxs)(o.li,{children:["\n",(0,s.jsxs)(o.p,{children:["Add a ",(0,s.jsxs)(o.a,{href:"/read-file",children:[(0,s.jsx)(o.strong,{children:"Read File"})," component"]})," to the flow, and then connect the ",(0,s.jsx)(o.strong,{children:"Raw Content"})," output port to the ",(0,s.jsx)(o.strong,{children:"Prompt Template"})," component's ",(0,s.jsx)(o.strong,{children:"file"})," input port.\nTo connect ports, click and drag from one port to the other."]}),"\n",(0,s.jsxs)(o.p,{children:["You can add files directly to the ",(0,s.jsx)(o.strong,{children:"Read File"})," component to pre-load input before running the flow, or you can load files at runtime. The next section of this tutorial covers runtime file uploads."]}),"\n",(0,s.jsxs)(o.p,{children:["At this point your flow has five components. The ",(0,s.jsx)(o.strong,{children:"Chat Input"})," and ",(0,s.jsx)(o.strong,{children:"Read File"})," components are connected to the ",(0,s.jsx)(o.strong,{children:"Prompt Template"})," component's input ports. Then, the ",(0,s.jsx)(o.strong,{children:"Prompt Template"})," component's output port is connected to the ",(0,s.jsx)(o.strong,{children:"Language Model"})," component's input port. Finally, the ",(0,s.jsx)(o.strong,{children:"Language Model"})," component's output port is connected to the ",(0,s.jsx)(o.strong,{children:"Chat Output"})," component, which returns the final response to the user."]}),"\n",(0,s.jsx)(o.p,{children:(0,s.jsx)(o.img,{alt:"File loader chat flow",src:t(47617).A+"",width:"4000",height:"1564"})}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(o.h2,{id:"send-requests-to-your-flow-from-a-python-application",children:"Send requests to your flow from a Python application"}),"\n",(0,s.jsx)(o.p,{children:"This section of the tutorial demonstrates how you can send file input to a flow from an application."}),"\n",(0,s.jsxs)(o.p,{children:["To do this, your application must send a ",(0,s.jsx)(o.code,{children:"POST /run"})," request to your Langflow server with the file you want to upload and a text prompt.\nThe result includes the outcome of the flow run and the LLM's response."]}),"\n",(0,s.jsxs)(o.p,{children:["This example uses a local Langflow instance, and it asks the LLM to evaluate a sample resume.\nIf you don't have a resume on hand, you can download ",(0,s.jsx)(o.a,{target:"_blank","data-noBrokenLinkCheck":!0,href:t(87481).A+"",children:"fake-resume.txt"}),"."]}),"\n",(0,s.jsx)(o.admonition,{type:"tip",children:(0,s.jsxs)(o.p,{children:["For help with constructing file upload requests in Python, JavaScript, and curl, see the ",(0,s.jsx)(o.a,{href:"https://langflow-file-upload-examples.21cgwws14kdz.us-east.codeengine.appdomain.cloud/",children:"Langflow File Upload Utility"}),"."]})}),"\n",(0,s.jsxs)(o.ol,{children:["\n",(0,s.jsxs)(o.li,{children:["\n",(0,s.jsx)(o.p,{children:"To construct the request, gather the following information:"}),"\n",(0,s.jsxs)(o.ul,{children:["\n",(0,s.jsxs)(o.li,{children:[(0,s.jsx)(o.code,{children:"LANGFLOW_SERVER_ADDRESS"}),": Your Langflow server's domain. The default value is ",(0,s.jsx)(o.code,{children:"127.0.0.1:7860"}),". You can get this value from the code snippets on your flow's ",(0,s.jsxs)(o.a,{href:"/concepts-publish#api-access",children:[(0,s.jsx)(o.strong,{children:"API access"})," pane"]}),"."]}),"\n",(0,s.jsxs)(o.li,{children:[(0,s.jsx)(o.code,{children:"FLOW_ID"}),": Your flow's UUID or custom endpoint name. You can get this value from the code snippets on your flow's ",(0,s.jsxs)(o.a,{href:"/concepts-publish#api-access",children:[(0,s.jsx)(o.strong,{children:"API access"})," pane"]}),"."]}),"\n",(0,s.jsxs)(o.li,{children:[(0,s.jsx)(o.code,{children:"FILE_COMPONENT_ID"}),": The UUID of the ",(0,s.jsx)(o.strong,{children:"Read File"})," component in your flow, such as ",(0,s.jsx)(o.code,{children:"File-KZP68"}),". To find the component ID, open your flow in Langflow, click the ",(0,s.jsx)(o.strong,{children:"Read File"})," component, and then click ",(0,s.jsx)(o.strong,{children:"Controls"}),". The component ID is at the top of the ",(0,s.jsx)(o.strong,{children:"Controls"})," pane."]}),"\n",(0,s.jsxs)(o.li,{children:[(0,s.jsx)(o.code,{children:"CHAT_INPUT"}),": The message you want to send to the Chat Input of your flow, such as ",(0,s.jsx)(o.code,{children:"Evaluate this resume for a job opening in my Marketing department."})]}),"\n",(0,s.jsxs)(o.li,{children:[(0,s.jsx)(o.code,{children:"FILE_NAME"})," and ",(0,s.jsx)(o.code,{children:"FILE_PATH"}),": The name and path to the local file that you want to send to your flow."]}),"\n",(0,s.jsxs)(o.li,{children:[(0,s.jsx)(o.code,{children:"LANGFLOW_API_KEY"}),": A valid ",(0,s.jsx)(o.a,{href:"/api-keys-and-authentication",children:"Langflow API key"}),"."]}),"\n"]}),"\n"]}),"\n",(0,s.jsxs)(o.li,{children:["\n",(0,s.jsx)(o.p,{children:"Copy the following script into a Python file, and then replace the placeholders with the information you gathered in the previous step:"}),"\n",(0,s.jsx)(d.Code,{codeConfig:h,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"# Python example using requests",props:{style:{color:"#8B949E"}}}]},{tokens:[{content:"import",props:{style:{color:"#FF7B72"}}},{content:" requests",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"import",props:{style:{color:"#FF7B72"}}},{content:" json",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"# 1. Set the upload URL",props:{style:{color:"#8B949E"}}}]},{tokens:[{content:"url ",props:{style:{color:"#C9D1D9"}}},{content:"= ",props:{style:{color:"#FF7B72"}}},{content:'"http://LANGFLOW_SERVER_ADDRESS/api/v2/files/"',props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:"",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"# 2. Prepare the file and payload",props:{style:{color:"#8B949E"}}}]},{tokens:[{content:"payload ",props:{style:{color:"#C9D1D9"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:" {}",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"files ",props:{style:{color:"#C9D1D9"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:" [",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" (",props:{style:{color:"#C9D1D9"}}},{content:"'file'",props:{style:{color:"#A5D6FF"}}},{content:", (",props:{style:{color:"#C9D1D9"}}},{content:"'FILE_PATH'",props:{style:{color:"#A5D6FF"}}},{content:", ",props:{style:{color:"#C9D1D9"}}},{content:"open",props:{style:{color:"#79C0FF"}}},{content:"(",props:{style:{color:"#C9D1D9"}}},{content:"'FILE_NAME'",props:{style:{color:"#A5D6FF"}}},{content:", ",props:{style:{color:"#C9D1D9"}}},{content:"'rb'",props:{style:{color:"#A5D6FF"}}},{content:"), ",props:{style:{color:"#C9D1D9"}}},{content:"'application/octet-stream'",props:{style:{color:"#A5D6FF"}}},{content:"))",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"]",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"headers ",props:{style:{color:"#C9D1D9"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:" {",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" 'Accept'",props:{style:{color:"#A5D6FF"}}},{content:": ",props:{style:{color:"#C9D1D9"}}},{content:"'application/json'",props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" 'x-api-key'",props:{style:{color:"#A5D6FF"}}},{content:": ",props:{style:{color:"#C9D1D9"}}},{content:"'LANGFLOW_API_KEY'",props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:"}",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"# 3. Upload the file to Langflow",props:{style:{color:"#8B949E"}}}]},{tokens:[{content:"response ",props:{style:{color:"#C9D1D9"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:" requests.request(",props:{style:{color:"#C9D1D9"}}},{content:'"POST"',props:{style:{color:"#A5D6FF"}}},{content:", url, ",props:{style:{color:"#C9D1D9"}}},{content:"headers",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:"headers, ",props:{style:{color:"#C9D1D9"}}},{content:"data",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:"payload, ",props:{style:{color:"#C9D1D9"}}},{content:"files",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:"files)",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"print",props:{style:{color:"#79C0FF"}}},{content:"(response.text)",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"# 4. Get the uploaded file path from the response",props:{style:{color:"#8B949E"}}}]},{tokens:[{content:"uploaded_data ",props:{style:{color:"#C9D1D9"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:" response.json()",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"uploaded_path ",props:{style:{color:"#C9D1D9"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:" uploaded_data.get(",props:{style:{color:"#C9D1D9"}}},{content:"'path'",props:{style:{color:"#A5D6FF"}}},{content:")",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"# 5. Call the Langflow run endpoint with the uploaded file path",props:{style:{color:"#8B949E"}}}]},{tokens:[{content:"run_url ",props:{style:{color:"#C9D1D9"}}},{content:"= ",props:{style:{color:"#FF7B72"}}},{content:'"http://LANGFLOW_SERVER_ADDRESS/api/v1/run/FLOW_ID"',props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:"run_payload ",props:{style:{color:"#C9D1D9"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:" {",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:' "input_value"',props:{style:{color:"#A5D6FF"}}},{content:": ",props:{style:{color:"#C9D1D9"}}},{content:'"CHAT_INPUT"',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:' "output_type"',props:{style:{color:"#A5D6FF"}}},{content:": ",props:{style:{color:"#C9D1D9"}}},{content:'"chat"',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:' "input_type"',props:{style:{color:"#A5D6FF"}}},{content:": ",props:{style:{color:"#C9D1D9"}}},{content:'"chat"',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:' "tweaks"',props:{style:{color:"#A5D6FF"}}},{content:": {",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:' "FILE_COMPONENT_ID"',props:{style:{color:"#A5D6FF"}}},{content:": {",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:' "path"',props:{style:{color:"#A5D6FF"}}},{content:": uploaded_path",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" }",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" }",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"}",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"run_headers ",props:{style:{color:"#C9D1D9"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:" {",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" 'Content-Type'",props:{style:{color:"#A5D6FF"}}},{content:": ",props:{style:{color:"#C9D1D9"}}},{content:"'application/json'",props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" 'Accept'",props:{style:{color:"#A5D6FF"}}},{content:": ",props:{style:{color:"#C9D1D9"}}},{content:"'application/json'",props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" 'x-api-key'",props:{style:{color:"#A5D6FF"}}},{content:": ",props:{style:{color:"#C9D1D9"}}},{content:"'LANGFLOW_API_KEY'",props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:"}",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"run_response ",props:{style:{color:"#C9D1D9"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:" requests.post(run_url, ",props:{style:{color:"#C9D1D9"}}},{content:"headers",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:"run_headers, ",props:{style:{color:"#C9D1D9"}}},{content:"data",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:"json.dumps(run_payload))",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"langflow_data ",props:{style:{color:"#C9D1D9"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:" run_response.json()",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"# Output only the message",props:{style:{color:"#8B949E"}}}]},{tokens:[{content:"message ",props:{style:{color:"#C9D1D9"}}},{content:"= ",props:{style:{color:"#FF7B72"}}},{content:"None",props:{style:{color:"#79C0FF"}}}]},{tokens:[{content:"try",props:{style:{color:"#FF7B72"}}},{content:":",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" message ",props:{style:{color:"#C9D1D9"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:" langflow_data[",props:{style:{color:"#C9D1D9"}}},{content:"'outputs'",props:{style:{color:"#A5D6FF"}}},{content:"][",props:{style:{color:"#C9D1D9"}}},{content:"0",props:{style:{color:"#79C0FF"}}},{content:"][",props:{style:{color:"#C9D1D9"}}},{content:"'outputs'",props:{style:{color:"#A5D6FF"}}},{content:"][",props:{style:{color:"#C9D1D9"}}},{content:"0",props:{style:{color:"#79C0FF"}}},{content:"][",props:{style:{color:"#C9D1D9"}}},{content:"'results'",props:{style:{color:"#A5D6FF"}}},{content:"][",props:{style:{color:"#C9D1D9"}}},{content:"'message'",props:{style:{color:"#A5D6FF"}}},{content:"][",props:{style:{color:"#C9D1D9"}}},{content:"'data'",props:{style:{color:"#A5D6FF"}}},{content:"][",props:{style:{color:"#C9D1D9"}}},{content:"'text'",props:{style:{color:"#A5D6FF"}}},{content:"]",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"except",props:{style:{color:"#FF7B72"}}},{content:" (",props:{style:{color:"#C9D1D9"}}},{content:"KeyError",props:{style:{color:"#79C0FF"}}},{content:", ",props:{style:{color:"#C9D1D9"}}},{content:"IndexError",props:{style:{color:"#79C0FF"}}},{content:", ",props:{style:{color:"#C9D1D9"}}},{content:"TypeError",props:{style:{color:"#79C0FF"}}},{content:"):",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" pass",props:{style:{color:"#FF7B72"}}}]},{tokens:[{content:"print",props:{style:{color:"#79C0FF"}}},{content:"(message)",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"",props:{style:{color:"#C9D1D9"}}}]}],lang:"python"},annotations:[]}]}),"\n",(0,s.jsx)(o.p,{children:"This script contains two requests."}),"\n",(0,s.jsxs)(o.p,{children:["The first request uploads a file, such as ",(0,s.jsx)(o.code,{children:"fake-resume.txt"}),", to your Langflow server at the ",(0,s.jsx)(o.code,{children:"/v2/files"})," endpoint. This request returns a file path that can be referenced in subsequent Langflow requests, such as ",(0,s.jsx)(o.code,{children:"02791d46-812f-4988-ab1c-7c430214f8d5/fake-resume.txt"})]}),"\n",(0,s.jsxs)(o.p,{children:["The second request sends a chat message to the Langflow flow at the ",(0,s.jsx)(o.code,{children:"/v1/run/"})," endpoint.\nThe ",(0,s.jsx)(o.code,{children:"tweaks"})," parameter includes the path to the uploaded file as the variable ",(0,s.jsx)(o.code,{children:"uploaded_path"}),", and sends this file directly to the ",(0,s.jsx)(o.strong,{children:"Read File"})," component."]}),"\n"]}),"\n",(0,s.jsxs)(o.li,{children:["\n",(0,s.jsx)(o.p,{children:"Save and run the script to send the requests and test the flow."}),"\n",(0,s.jsx)(o.p,{children:"The initial output contains the JSON response object from the file upload endpoint, including the internal path where Langflow stores the file.\nThen, the LLM retrieves the file and evaluates its content, in this case the suitability of the resume for a job position."}),"\n",(0,s.jsxs)(n,{children:[(0,s.jsx)("summary",{children:"Result"}),(0,s.jsx)(o.p,{children:"The following is an example response from this tutorial's flow. Due to the nature of LLMs and variations in your inputs, your response might be different."}),(0,s.jsx)(d.Code,{codeConfig:h,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:'{"id":"793ba3d8-5e7a-4499-8b89-d9a7b6325fee","name":"fake-resume (1)","path":"02791d46-812f-4988-ab1c-7c430214f8d5/fake-resume.txt","size":1779,"provider":null}',props:{}}]},{tokens:[{content:"The resume for Emily J. Wilson presents a strong candidate for a position in your Marketing department. Here are some key points to consider:",props:{}}]},{tokens:[{content:"",props:{}}]},{tokens:[{content:"### Strengths:",props:{}}]},{tokens:[{content:"1. **Experience**: With over 8 years in marketing, Emily has held progressively responsible positions, culminating in her current role as Marketing Director. This indicates a solid foundation in the field.",props:{}}]},{tokens:[{content:"",props:{}}]},{tokens:[{content:"2. **Quantifiable Achievements**: The resume highlights specific accomplishments, such as a 25% increase in brand recognition and a 30% sales increase after launching new product lines. These metrics demonstrate her ability to drive results.",props:{}}]},{tokens:[{content:"",props:{}}]},{tokens:[{content:"3. **Diverse Skill Set**: Emily's skills encompass various aspects of marketing, including strategy development, team management, social media marketing, event planning, and data analysis. This versatility can be beneficial in a dynamic marketing environment.",props:{}}]},{tokens:[{content:"",props:{}}]},{tokens:[{content:"4. **Educational Background**: Her MBA and a Bachelor's degree in Marketing provide a strong academic foundation, which is often valued in marketing roles.",props:{}}]},{tokens:[{content:"",props:{}}]},{tokens:[{content:"5. **Certifications**: The Certified Marketing Professional (CMP) and Google Analytics Certification indicate a commitment to professional development and staying current with industry standards.",props:{}}]},{tokens:[{content:"",props:{}}]},{tokens:[{content:"### Areas for Improvement:",props:{}}]},{tokens:[{content:"1. **Specificity in Skills**: While the skills listed are relevant, providing examples of how she has applied these skills in her previous roles could strengthen her resume further.",props:{}}]},{tokens:[{content:"",props:{}}]},{tokens:[{content:"2. **References**: While stating that references are available upon request is standard, including a couple of testimonials or notable endorsements could enhance credibility.",props:{}}]},{tokens:[{content:"",props:{}}]},{tokens:[{content:"3. **Formatting**: Ensure that the resume is visually appealing and easy to read. Clear headings and bullet points help in quickly identifying key information.",props:{}}]},{tokens:[{content:"",props:{}}]},{tokens:[{content:"### Conclusion:",props:{}}]},{tokens:[{content:"Overall, Emily J. Wilson's resume reflects a well-rounded marketing professional with a proven track record of success. If her experience aligns with the specific needs of your Marketing department, she could be a valuable addition to your team. Consider inviting her for an interview to further assess her fit for the role.",props:{}}]}],lang:"text"},annotations:[]}]})]}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(o.h2,{id:"next-steps",children:"Next steps"}),"\n",(0,s.jsx)(o.p,{children:"To continue building on this tutorial, try these next steps."}),"\n",(0,s.jsx)(o.h3,{id:"process-multiple-files-loaded-at-runtime",children:"Process multiple files loaded at runtime"}),"\n",(0,s.jsxs)(o.p,{children:["To process multiple files in a single flow run, add a separate ",(0,s.jsx)(o.strong,{children:"Read File"})," component for each file you want to ingest. Then, modify your script to upload each file, retrieve each returned file path, and then pass a unique file path to each ",(0,s.jsx)(o.strong,{children:"Read File"})," component ID."]}),"\n",(0,s.jsxs)(o.p,{children:["For example, you can modify ",(0,s.jsx)(o.code,{children:"tweaks"})," to accept multiple ",(0,s.jsx)(o.strong,{children:"Read File"})," components.\nThe following code is just an example; it isn't working code:"]}),"\n",(0,s.jsx)(d.Code,{codeConfig:h,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"## set multiple file paths",props:{style:{color:"#8B949E"}}}]},{tokens:[{content:"file_paths ",props:{style:{color:"#C9D1D9"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:" {",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" FILE_COMPONENT_1",props:{style:{color:"#79C0FF"}}},{content:": uploaded_path_1,",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" FILE_COMPONENT_2",props:{style:{color:"#79C0FF"}}},{content:": uploaded_path_2",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"}",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"def ",props:{style:{color:"#FF7B72"}}},{content:"chat_with_flow",props:{style:{color:"#D2A8FF"}}},{content:"(input_message, file_paths):",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:' """Compare the contents of these two files."""',props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:" run_url ",props:{style:{color:"#C9D1D9"}}},{content:"= f",props:{style:{color:"#FF7B72"}}},{content:'"',props:{style:{color:"#A5D6FF"}}},{content:"{LANGFLOW_SERVER_ADDRESS}",props:{style:{color:"#79C0FF"}}},{content:"/api/v1/run/",props:{style:{color:"#A5D6FF"}}},{content:"{FLOW_ID}",props:{style:{color:"#79C0FF"}}},{content:'"',props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:" # Prepare tweaks with both file paths",props:{style:{color:"#8B949E"}}}]},{tokens:[{content:" tweaks ",props:{style:{color:"#C9D1D9"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:" {}",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" for",props:{style:{color:"#FF7B72"}}},{content:" component_id, file_path ",props:{style:{color:"#C9D1D9"}}},{content:"in",props:{style:{color:"#FF7B72"}}},{content:" file_paths.items():",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" tweaks[component_id] ",props:{style:{color:"#C9D1D9"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:" {",props:{style:{color:"#C9D1D9"}}},{content:'"path"',props:{style:{color:"#A5D6FF"}}},{content:": file_path}",props:{style:{color:"#C9D1D9"}}}]}],lang:"python"},annotations:[]}]}),"\n",(0,s.jsxs)(o.p,{children:["You can also use a ",(0,s.jsxs)(o.a,{href:"/directory",children:[(0,s.jsx)(o.strong,{children:"Directory"})," component"]})," to load all files in a directory or pass an archive file to the ",(0,s.jsx)(o.strong,{children:"Read File"})," component."]}),"\n",(0,s.jsx)(o.h3,{id:"upload-external-files-at-runtime",children:"Upload external files at runtime"}),"\n",(0,s.jsxs)(o.p,{children:["To upload files from another machine that isn't your local environment, your Langflow server must first be accessible over the internet. Then, authenticated users can upload files to your public Langflow server's ",(0,s.jsx)(o.code,{children:"/v2/files/"})," endpoint, as shown in the tutorial. For more information, see ",(0,s.jsx)(o.a,{href:"/deployment-overview",children:"Langflow deployment overview"}),"."]}),"\n",(0,s.jsx)(o.h3,{id:"preload-files-outside-the-chat-session",children:"Preload files outside the chat session"}),"\n",(0,s.jsxs)(o.p,{children:["You can use the ",(0,s.jsx)(o.strong,{children:"Read File"})," component to load files anywhere in a flow, not just in a chat session."]}),"\n",(0,s.jsxs)(o.p,{children:["In the visual editor, you can preload files to the ",(0,s.jsx)(o.strong,{children:"Read File"})," component by selecting them from your local machine or ",(0,s.jsx)(o.a,{href:"/concepts-file-management",children:"Langflow file management"}),"."]}),"\n",(0,s.jsx)(o.p,{children:"For example, you can preload an instructions file for a prompt template, or you can preload a vector store with documents that you want to query in a Retrieval Augmented Generation (RAG) flow."}),"\n",(0,s.jsxs)(o.p,{children:["For more information about the ",(0,s.jsx)(o.strong,{children:"Read File"})," component and other data loading components, see the ",(0,s.jsxs)(o.a,{href:"/read-file",children:[(0,s.jsx)(o.strong,{children:"Read File"})," component"]}),"."]})]})}function f(e={}){const{wrapper:o}={...(0,r.R)(),...e.components};return o?(0,s.jsx)(o,{...e,children:(0,s.jsx)(y,{...e})}):y(e)}function D(e,o){throw new Error("Expected "+(o?"component":"object")+" `"+e+"` to be defined: you likely forgot to import, pass, or provide it.")}},87481:(e,o,t)=>{t.d(o,{A:()=>n});const n=t.p+"assets/files/fake-resume-fa337cbdb18306bd29e3168f73409745.txt"}}]); \ No newline at end of file diff --git a/assets/js/2fc7e024.88a7766e.js b/assets/js/2fc7e024.88a7766e.js new file mode 100644 index 0000000000..8570658f48 --- /dev/null +++ b/assets/js/2fc7e024.88a7766e.js @@ -0,0 +1 @@ +"use strict";(globalThis.webpackChunklangflow_docs=globalThis.webpackChunklangflow_docs||[]).push([[1408],{47617:(e,t,o)=>{o.d(t,{A:()=>n});const n=o.p+"assets/images/tutorial-chat-file-loader-099f2f4c5e4343412557b1a78c4b9209.png"},57844:(e,t,o)=>{o.r(t),o.d(t,{CH:()=>d,assets:()=>p,chCodeConfig:()=>h,contentTitle:()=>a,default:()=>f,frontMatter:()=>i,metadata:()=>n,toc:()=>u});const n=JSON.parse('{"id":"Tutorials/chat-with-files","title":"Create a chatbot that can ingest files","description":"This tutorial shows you how to build a chatbot that can read and answer questions about files you upload, such as meeting notes or job applications.","source":"@site/docs/Tutorials/chat-with-files.mdx","sourceDirName":"Tutorials","slug":"/chat-with-files","permalink":"/chat-with-files","draft":false,"unlisted":false,"tags":[],"version":"current","frontMatter":{"title":"Create a chatbot that can ingest files","slug":"/chat-with-files"},"sidebar":"docs","previous":{"title":"Create a vector RAG chatbot","permalink":"/chat-with-rag"},"next":{"title":"Connect applications to agents","permalink":"/agent-tutorial"}}');var s=o(74848),r=o(28453),l=o(24754),c=o(40619);const i={title:"Create a chatbot that can ingest files",slug:"/chat-with-files"},a=void 0,p={},d={annotations:l.hk,Code:l.Cy},h={staticMediaQuery:"not screen, (max-width: 768px)",lineNumbers:!0,showCopyButton:!0,themeName:"github-dark"},u=[{value:"Prerequisites",id:"prerequisites",level:2},{value:"Create a flow that accepts file input",id:"create-a-flow-that-accepts-file-input",level:2},{value:"Send requests to your flow from a Python application",id:"send-requests-to-your-flow-from-a-python-application",level:2},{value:"Next steps",id:"next-steps",level:2},{value:"Process multiple files loaded at runtime",id:"process-multiple-files-loaded-at-runtime",level:3},{value:"Upload external files at runtime",id:"upload-external-files-at-runtime",level:3},{value:"Preload files outside the chat session",id:"preload-files-outside-the-chat-session",level:3}];function y(e){const t={a:"a",admonition:"admonition",code:"code",h2:"h2",h3:"h3",img:"img",li:"li",ol:"ol",p:"p",strong:"strong",ul:"ul",...(0,r.R)(),...e.components},{Details:n}=t;return d||D("CH",!1),d.Code||D("CH.Code",!0),n||D("Details",!0),(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)("style",{dangerouslySetInnerHTML:{__html:'[data-ch-theme="github-dark"] { --ch-t-colorScheme: dark;--ch-t-foreground: #c9d1d9;--ch-t-background: #0d1117;--ch-t-lighter-inlineBackground: #0d1117e6;--ch-t-editor-background: #0d1117;--ch-t-editor-foreground: #c9d1d9;--ch-t-editor-lineHighlightBackground: #6e76811a;--ch-t-editor-rangeHighlightBackground: #ffffff0b;--ch-t-editor-infoForeground: #3794FF;--ch-t-editor-selectionBackground: #264F78;--ch-t-focusBorder: #1f6feb;--ch-t-tab-activeBackground: #0d1117;--ch-t-tab-activeForeground: #c9d1d9;--ch-t-tab-inactiveBackground: #010409;--ch-t-tab-inactiveForeground: #8b949e;--ch-t-tab-border: #30363d;--ch-t-tab-activeBorder: #0d1117;--ch-t-editorGroup-border: #30363d;--ch-t-editorGroupHeader-tabsBackground: #010409;--ch-t-editorLineNumber-foreground: #6e7681;--ch-t-input-background: #0d1117;--ch-t-input-foreground: #c9d1d9;--ch-t-input-border: #30363d;--ch-t-icon-foreground: #8b949e;--ch-t-sideBar-background: #010409;--ch-t-sideBar-foreground: #c9d1d9;--ch-t-sideBar-border: #30363d;--ch-t-list-activeSelectionBackground: #6e768166;--ch-t-list-activeSelectionForeground: #c9d1d9;--ch-t-list-hoverBackground: #6e76811a;--ch-t-list-hoverForeground: #c9d1d9; }'}}),"\n","\n",(0,s.jsx)(t.p,{children:"This tutorial shows you how to build a chatbot that can read and answer questions about files you upload, such as meeting notes or job applications."}),"\n",(0,s.jsx)(t.p,{children:"For example, you could upload a contract and ask, \u201cWhat are the termination clauses in this agreement?\u201d Or upload a resume and ask, \u201cDoes this candidate have experience with marketing analytics?\u201d"}),"\n",(0,s.jsx)(t.p,{children:"The main focus of this tutorial is to show you how to provide files as input to a Langflow flow, so your chatbot can use the content of those files in its responses."}),"\n",(0,s.jsx)(t.h2,{id:"prerequisites",children:"Prerequisites"}),"\n",(0,s.jsxs)(t.ul,{children:["\n",(0,s.jsx)(t.li,{children:(0,s.jsx)(t.a,{href:"/get-started-installation",children:"Install and start Langflow"})}),"\n",(0,s.jsxs)(t.li,{children:["Create a ",(0,s.jsx)(t.a,{href:"/api-keys-and-authentication",children:"Langflow API key"})]}),"\n",(0,s.jsxs)(t.li,{children:["Create an ",(0,s.jsx)(t.a,{href:"https://platform.openai.com/api-keys",children:"OpenAI API key"})]}),"\n"]}),"\n",(0,s.jsx)(t.p,{children:"This tutorial uses an OpenAI LLM. If you want to use a different provider, you need a valid credential for that provider."}),"\n",(0,s.jsx)(t.h2,{id:"create-a-flow-that-accepts-file-input",children:"Create a flow that accepts file input"}),"\n",(0,s.jsxs)(t.p,{children:["To ingest files, your flow must have a ",(0,s.jsx)(t.strong,{children:"Read File"})," component attached to a component that receives input, such as a ",(0,s.jsx)(t.strong,{children:"Prompt Template"})," or ",(0,s.jsx)(t.strong,{children:"Agent"})," component."]}),"\n",(0,s.jsxs)(t.p,{children:["The following steps modify the ",(0,s.jsx)(t.strong,{children:"Basic Prompting"})," template to accept file input:"]}),"\n",(0,s.jsxs)(t.ol,{children:["\n",(0,s.jsxs)(t.li,{children:["\n",(0,s.jsxs)(t.p,{children:["In Langflow, click ",(0,s.jsx)(t.strong,{children:"New Flow"}),", and then select the ",(0,s.jsx)(t.strong,{children:"Basic Prompting"})," template."]}),"\n"]}),"\n",(0,s.jsxs)(t.li,{children:["\n",(0,s.jsxs)(t.p,{children:["In the ",(0,s.jsx)(t.strong,{children:"Language Model"})," component, enter your OpenAI API key."]}),"\n",(0,s.jsxs)(t.p,{children:["If you want to use a different provider or model, edit the ",(0,s.jsx)(t.strong,{children:"Model Provider"}),", ",(0,s.jsx)(t.strong,{children:"Model Name"}),", and ",(0,s.jsx)(t.strong,{children:"API Key"})," fields accordingly."]}),"\n"]}),"\n",(0,s.jsxs)(t.li,{children:["\n",(0,s.jsxs)(t.p,{children:["To verify that your API key is valid, click ",(0,s.jsx)(c.A,{name:"Play","aria-hidden":"true"})," ",(0,s.jsx)(t.strong,{children:"Playground"}),", and then ask the LLM a question.\nThe LLM should respond according to the specifications in the ",(0,s.jsx)(t.strong,{children:"Prompt Template"})," component's ",(0,s.jsx)(t.strong,{children:"Template"})," field."]}),"\n"]}),"\n",(0,s.jsxs)(t.li,{children:["\n",(0,s.jsxs)(t.p,{children:["Exit the ",(0,s.jsx)(t.strong,{children:"Playground"}),", and then modify the ",(0,s.jsx)(t.strong,{children:"Prompt Template"})," component to accept file input in addition to chat input.\nTo do this, edit the ",(0,s.jsx)(t.strong,{children:"Template"})," field, and then replace the default prompt with the following text:"]}),"\n",(0,s.jsx)(d.Code,{codeConfig:h,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"ChatInput:",props:{}}]},{tokens:[{content:"{chat-input}",props:{}}]},{tokens:[{content:"File:",props:{}}]},{tokens:[{content:"{file}",props:{}}]}],lang:"text"},annotations:[]}]}),"\n",(0,s.jsxs)(t.admonition,{type:"tip",children:[(0,s.jsxs)(t.p,{children:["You can use any string to name your template variables.\nThese strings become the names of the fields (input ports) on the ",(0,s.jsx)(t.strong,{children:"Prompt Template"})," component."]}),(0,s.jsxs)(t.p,{children:["For this tutorial, the variables are named after the components that connect to them: ",(0,s.jsx)(t.strong,{children:"chat-input"})," for the ",(0,s.jsx)(t.strong,{children:"Chat Input"})," component and ",(0,s.jsx)(t.strong,{children:"file"})," for the ",(0,s.jsx)(t.strong,{children:"Read File"})," component."]})]}),"\n"]}),"\n",(0,s.jsxs)(t.li,{children:["\n",(0,s.jsxs)(t.p,{children:["Add a ",(0,s.jsxs)(t.a,{href:"/read-file",children:[(0,s.jsx)(t.strong,{children:"Read File"})," component"]})," to the flow, and then connect the ",(0,s.jsx)(t.strong,{children:"Raw Content"})," output port to the ",(0,s.jsx)(t.strong,{children:"Prompt Template"})," component's ",(0,s.jsx)(t.strong,{children:"file"})," input port.\nTo connect ports, click and drag from one port to the other."]}),"\n",(0,s.jsxs)(t.p,{children:["You can add files directly to the ",(0,s.jsx)(t.strong,{children:"Read File"})," component to pre-load input before running the flow, or you can load files at runtime. The next section of this tutorial covers runtime file uploads."]}),"\n",(0,s.jsxs)(t.p,{children:["At this point your flow has five components. The ",(0,s.jsx)(t.strong,{children:"Chat Input"})," and ",(0,s.jsx)(t.strong,{children:"Read File"})," components are connected to the ",(0,s.jsx)(t.strong,{children:"Prompt Template"})," component's input ports. Then, the ",(0,s.jsx)(t.strong,{children:"Prompt Template"})," component's output port is connected to the ",(0,s.jsx)(t.strong,{children:"Language Model"})," component's input port. Finally, the ",(0,s.jsx)(t.strong,{children:"Language Model"})," component's output port is connected to the ",(0,s.jsx)(t.strong,{children:"Chat Output"})," component, which returns the final response to the user."]}),"\n",(0,s.jsx)(t.p,{children:(0,s.jsx)(t.img,{alt:"File loader chat flow",src:o(47617).A+"",width:"4000",height:"1564"})}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(t.h2,{id:"send-requests-to-your-flow-from-a-python-application",children:"Send requests to your flow from a Python application"}),"\n",(0,s.jsx)(t.p,{children:"This section of the tutorial demonstrates how you can send file input to a flow from an application."}),"\n",(0,s.jsxs)(t.p,{children:["To do this, your application must send a ",(0,s.jsx)(t.code,{children:"POST /run"})," request to your Langflow server with the file you want to upload and a text prompt.\nThe result includes the outcome of the flow run and the LLM's response."]}),"\n",(0,s.jsxs)(t.p,{children:["This example uses a local Langflow instance, and it asks the LLM to evaluate a sample resume.\nIf you don't have a resume on hand, you can download ",(0,s.jsx)(t.a,{target:"_blank","data-noBrokenLinkCheck":!0,href:o(87481).A+"",children:"fake-resume.txt"}),"."]}),"\n",(0,s.jsx)(t.admonition,{type:"tip",children:(0,s.jsxs)(t.p,{children:["For an example of constructing file upload requests in JavaScript, see the ",(0,s.jsx)(t.a,{href:"/chat-with-rag#load-data-and-generate-embeddings",children:"Create a vector RAG chatbot tutorial"}),"."]})}),"\n",(0,s.jsxs)(t.ol,{children:["\n",(0,s.jsxs)(t.li,{children:["\n",(0,s.jsx)(t.p,{children:"To construct the request, gather the following information:"}),"\n",(0,s.jsxs)(t.ul,{children:["\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.code,{children:"LANGFLOW_SERVER_ADDRESS"}),": Your Langflow server's domain. The default value is ",(0,s.jsx)(t.code,{children:"127.0.0.1:7860"}),". You can get this value from the code snippets on your flow's ",(0,s.jsxs)(t.a,{href:"/concepts-publish#api-access",children:[(0,s.jsx)(t.strong,{children:"API access"})," pane"]}),"."]}),"\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.code,{children:"FLOW_ID"}),": Your flow's UUID or custom endpoint name. You can get this value from the code snippets on your flow's ",(0,s.jsxs)(t.a,{href:"/concepts-publish#api-access",children:[(0,s.jsx)(t.strong,{children:"API access"})," pane"]}),"."]}),"\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.code,{children:"FILE_COMPONENT_ID"}),": The UUID of the ",(0,s.jsx)(t.strong,{children:"Read File"})," component in your flow, such as ",(0,s.jsx)(t.code,{children:"File-KZP68"}),". To find the component ID, open your flow in Langflow, click the ",(0,s.jsx)(t.strong,{children:"Read File"})," component, and then click ",(0,s.jsx)(t.strong,{children:"Controls"}),". The component ID is at the top of the ",(0,s.jsx)(t.strong,{children:"Controls"})," pane."]}),"\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.code,{children:"CHAT_INPUT"}),": The message you want to send to the Chat Input of your flow, such as ",(0,s.jsx)(t.code,{children:"Evaluate this resume for a job opening in my Marketing department."})]}),"\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.code,{children:"FILE_NAME"})," and ",(0,s.jsx)(t.code,{children:"FILE_PATH"}),": The name and path to the local file that you want to send to your flow."]}),"\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.code,{children:"LANGFLOW_API_KEY"}),": A valid ",(0,s.jsx)(t.a,{href:"/api-keys-and-authentication",children:"Langflow API key"}),"."]}),"\n"]}),"\n"]}),"\n",(0,s.jsxs)(t.li,{children:["\n",(0,s.jsx)(t.p,{children:"Copy the following script into a Python file, and then replace the placeholders with the information you gathered in the previous step:"}),"\n",(0,s.jsx)(d.Code,{codeConfig:h,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"# Python example using requests",props:{style:{color:"#8B949E"}}}]},{tokens:[{content:"import",props:{style:{color:"#FF7B72"}}},{content:" requests",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"import",props:{style:{color:"#FF7B72"}}},{content:" json",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"# 1. Set the upload URL",props:{style:{color:"#8B949E"}}}]},{tokens:[{content:"url ",props:{style:{color:"#C9D1D9"}}},{content:"= ",props:{style:{color:"#FF7B72"}}},{content:'"http://LANGFLOW_SERVER_ADDRESS/api/v2/files/"',props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:"",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"# 2. Prepare the file and payload",props:{style:{color:"#8B949E"}}}]},{tokens:[{content:"payload ",props:{style:{color:"#C9D1D9"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:" {}",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"files ",props:{style:{color:"#C9D1D9"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:" [",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" (",props:{style:{color:"#C9D1D9"}}},{content:"'file'",props:{style:{color:"#A5D6FF"}}},{content:", (",props:{style:{color:"#C9D1D9"}}},{content:"'FILE_PATH'",props:{style:{color:"#A5D6FF"}}},{content:", ",props:{style:{color:"#C9D1D9"}}},{content:"open",props:{style:{color:"#79C0FF"}}},{content:"(",props:{style:{color:"#C9D1D9"}}},{content:"'FILE_NAME'",props:{style:{color:"#A5D6FF"}}},{content:", ",props:{style:{color:"#C9D1D9"}}},{content:"'rb'",props:{style:{color:"#A5D6FF"}}},{content:"), ",props:{style:{color:"#C9D1D9"}}},{content:"'application/octet-stream'",props:{style:{color:"#A5D6FF"}}},{content:"))",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"]",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"headers ",props:{style:{color:"#C9D1D9"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:" {",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" 'Accept'",props:{style:{color:"#A5D6FF"}}},{content:": ",props:{style:{color:"#C9D1D9"}}},{content:"'application/json'",props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" 'x-api-key'",props:{style:{color:"#A5D6FF"}}},{content:": ",props:{style:{color:"#C9D1D9"}}},{content:"'LANGFLOW_API_KEY'",props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:"}",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"# 3. Upload the file to Langflow",props:{style:{color:"#8B949E"}}}]},{tokens:[{content:"response ",props:{style:{color:"#C9D1D9"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:" requests.request(",props:{style:{color:"#C9D1D9"}}},{content:'"POST"',props:{style:{color:"#A5D6FF"}}},{content:", url, ",props:{style:{color:"#C9D1D9"}}},{content:"headers",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:"headers, ",props:{style:{color:"#C9D1D9"}}},{content:"data",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:"payload, ",props:{style:{color:"#C9D1D9"}}},{content:"files",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:"files)",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"print",props:{style:{color:"#79C0FF"}}},{content:"(response.text)",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"# 4. Get the uploaded file path from the response",props:{style:{color:"#8B949E"}}}]},{tokens:[{content:"uploaded_data ",props:{style:{color:"#C9D1D9"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:" response.json()",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"uploaded_path ",props:{style:{color:"#C9D1D9"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:" uploaded_data.get(",props:{style:{color:"#C9D1D9"}}},{content:"'path'",props:{style:{color:"#A5D6FF"}}},{content:")",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"# 5. Call the Langflow run endpoint with the uploaded file path",props:{style:{color:"#8B949E"}}}]},{tokens:[{content:"run_url ",props:{style:{color:"#C9D1D9"}}},{content:"= ",props:{style:{color:"#FF7B72"}}},{content:'"http://LANGFLOW_SERVER_ADDRESS/api/v1/run/FLOW_ID"',props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:"run_payload ",props:{style:{color:"#C9D1D9"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:" {",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:' "input_value"',props:{style:{color:"#A5D6FF"}}},{content:": ",props:{style:{color:"#C9D1D9"}}},{content:'"CHAT_INPUT"',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:' "output_type"',props:{style:{color:"#A5D6FF"}}},{content:": ",props:{style:{color:"#C9D1D9"}}},{content:'"chat"',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:' "input_type"',props:{style:{color:"#A5D6FF"}}},{content:": ",props:{style:{color:"#C9D1D9"}}},{content:'"chat"',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:' "tweaks"',props:{style:{color:"#A5D6FF"}}},{content:": {",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:' "FILE_COMPONENT_ID"',props:{style:{color:"#A5D6FF"}}},{content:": {",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:' "path"',props:{style:{color:"#A5D6FF"}}},{content:": uploaded_path",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" }",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" }",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"}",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"run_headers ",props:{style:{color:"#C9D1D9"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:" {",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" 'Content-Type'",props:{style:{color:"#A5D6FF"}}},{content:": ",props:{style:{color:"#C9D1D9"}}},{content:"'application/json'",props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" 'Accept'",props:{style:{color:"#A5D6FF"}}},{content:": ",props:{style:{color:"#C9D1D9"}}},{content:"'application/json'",props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" 'x-api-key'",props:{style:{color:"#A5D6FF"}}},{content:": ",props:{style:{color:"#C9D1D9"}}},{content:"'LANGFLOW_API_KEY'",props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:"}",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"run_response ",props:{style:{color:"#C9D1D9"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:" requests.post(run_url, ",props:{style:{color:"#C9D1D9"}}},{content:"headers",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:"run_headers, ",props:{style:{color:"#C9D1D9"}}},{content:"data",props:{style:{color:"#FFA657"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:"json.dumps(run_payload))",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"langflow_data ",props:{style:{color:"#C9D1D9"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:" run_response.json()",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"# Output only the message",props:{style:{color:"#8B949E"}}}]},{tokens:[{content:"message ",props:{style:{color:"#C9D1D9"}}},{content:"= ",props:{style:{color:"#FF7B72"}}},{content:"None",props:{style:{color:"#79C0FF"}}}]},{tokens:[{content:"try",props:{style:{color:"#FF7B72"}}},{content:":",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" message ",props:{style:{color:"#C9D1D9"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:" langflow_data[",props:{style:{color:"#C9D1D9"}}},{content:"'outputs'",props:{style:{color:"#A5D6FF"}}},{content:"][",props:{style:{color:"#C9D1D9"}}},{content:"0",props:{style:{color:"#79C0FF"}}},{content:"][",props:{style:{color:"#C9D1D9"}}},{content:"'outputs'",props:{style:{color:"#A5D6FF"}}},{content:"][",props:{style:{color:"#C9D1D9"}}},{content:"0",props:{style:{color:"#79C0FF"}}},{content:"][",props:{style:{color:"#C9D1D9"}}},{content:"'results'",props:{style:{color:"#A5D6FF"}}},{content:"][",props:{style:{color:"#C9D1D9"}}},{content:"'message'",props:{style:{color:"#A5D6FF"}}},{content:"][",props:{style:{color:"#C9D1D9"}}},{content:"'data'",props:{style:{color:"#A5D6FF"}}},{content:"][",props:{style:{color:"#C9D1D9"}}},{content:"'text'",props:{style:{color:"#A5D6FF"}}},{content:"]",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"except",props:{style:{color:"#FF7B72"}}},{content:" (",props:{style:{color:"#C9D1D9"}}},{content:"KeyError",props:{style:{color:"#79C0FF"}}},{content:", ",props:{style:{color:"#C9D1D9"}}},{content:"IndexError",props:{style:{color:"#79C0FF"}}},{content:", ",props:{style:{color:"#C9D1D9"}}},{content:"TypeError",props:{style:{color:"#79C0FF"}}},{content:"):",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" pass",props:{style:{color:"#FF7B72"}}}]},{tokens:[{content:"print",props:{style:{color:"#79C0FF"}}},{content:"(message)",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"",props:{style:{color:"#C9D1D9"}}}]}],lang:"python"},annotations:[]}]}),"\n",(0,s.jsx)(t.p,{children:"This script contains two requests."}),"\n",(0,s.jsxs)(t.p,{children:["The first request uploads a file, such as ",(0,s.jsx)(t.code,{children:"fake-resume.txt"}),", to your Langflow server at the ",(0,s.jsx)(t.code,{children:"/v2/files"})," endpoint. This request returns a file path that can be referenced in subsequent Langflow requests, such as ",(0,s.jsx)(t.code,{children:"02791d46-812f-4988-ab1c-7c430214f8d5/fake-resume.txt"})]}),"\n",(0,s.jsxs)(t.p,{children:["The second request sends a chat message to the Langflow flow at the ",(0,s.jsx)(t.code,{children:"/v1/run/"})," endpoint.\nThe ",(0,s.jsx)(t.code,{children:"tweaks"})," parameter includes the path to the uploaded file as the variable ",(0,s.jsx)(t.code,{children:"uploaded_path"}),", and sends this file directly to the ",(0,s.jsx)(t.strong,{children:"Read File"})," component."]}),"\n"]}),"\n",(0,s.jsxs)(t.li,{children:["\n",(0,s.jsx)(t.p,{children:"Save and run the script to send the requests and test the flow."}),"\n",(0,s.jsx)(t.p,{children:"The initial output contains the JSON response object from the file upload endpoint, including the internal path where Langflow stores the file.\nThen, the LLM retrieves the file and evaluates its content, in this case the suitability of the resume for a job position."}),"\n",(0,s.jsxs)(n,{children:[(0,s.jsx)("summary",{children:"Result"}),(0,s.jsx)(t.p,{children:"The following is an example response from this tutorial's flow. Due to the nature of LLMs and variations in your inputs, your response might be different."}),(0,s.jsx)(d.Code,{codeConfig:h,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:'{"id":"793ba3d8-5e7a-4499-8b89-d9a7b6325fee","name":"fake-resume (1)","path":"02791d46-812f-4988-ab1c-7c430214f8d5/fake-resume.txt","size":1779,"provider":null}',props:{}}]},{tokens:[{content:"The resume for Emily J. Wilson presents a strong candidate for a position in your Marketing department. Here are some key points to consider:",props:{}}]},{tokens:[{content:"",props:{}}]},{tokens:[{content:"### Strengths:",props:{}}]},{tokens:[{content:"1. **Experience**: With over 8 years in marketing, Emily has held progressively responsible positions, culminating in her current role as Marketing Director. This indicates a solid foundation in the field.",props:{}}]},{tokens:[{content:"",props:{}}]},{tokens:[{content:"2. **Quantifiable Achievements**: The resume highlights specific accomplishments, such as a 25% increase in brand recognition and a 30% sales increase after launching new product lines. These metrics demonstrate her ability to drive results.",props:{}}]},{tokens:[{content:"",props:{}}]},{tokens:[{content:"3. **Diverse Skill Set**: Emily's skills encompass various aspects of marketing, including strategy development, team management, social media marketing, event planning, and data analysis. This versatility can be beneficial in a dynamic marketing environment.",props:{}}]},{tokens:[{content:"",props:{}}]},{tokens:[{content:"4. **Educational Background**: Her MBA and a Bachelor's degree in Marketing provide a strong academic foundation, which is often valued in marketing roles.",props:{}}]},{tokens:[{content:"",props:{}}]},{tokens:[{content:"5. **Certifications**: The Certified Marketing Professional (CMP) and Google Analytics Certification indicate a commitment to professional development and staying current with industry standards.",props:{}}]},{tokens:[{content:"",props:{}}]},{tokens:[{content:"### Areas for Improvement:",props:{}}]},{tokens:[{content:"1. **Specificity in Skills**: While the skills listed are relevant, providing examples of how she has applied these skills in her previous roles could strengthen her resume further.",props:{}}]},{tokens:[{content:"",props:{}}]},{tokens:[{content:"2. **References**: While stating that references are available upon request is standard, including a couple of testimonials or notable endorsements could enhance credibility.",props:{}}]},{tokens:[{content:"",props:{}}]},{tokens:[{content:"3. **Formatting**: Ensure that the resume is visually appealing and easy to read. Clear headings and bullet points help in quickly identifying key information.",props:{}}]},{tokens:[{content:"",props:{}}]},{tokens:[{content:"### Conclusion:",props:{}}]},{tokens:[{content:"Overall, Emily J. Wilson's resume reflects a well-rounded marketing professional with a proven track record of success. If her experience aligns with the specific needs of your Marketing department, she could be a valuable addition to your team. Consider inviting her for an interview to further assess her fit for the role.",props:{}}]}],lang:"text"},annotations:[]}]})]}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(t.h2,{id:"next-steps",children:"Next steps"}),"\n",(0,s.jsx)(t.p,{children:"To continue building on this tutorial, try these next steps."}),"\n",(0,s.jsx)(t.h3,{id:"process-multiple-files-loaded-at-runtime",children:"Process multiple files loaded at runtime"}),"\n",(0,s.jsxs)(t.p,{children:["To process multiple files in a single flow run, add a separate ",(0,s.jsx)(t.strong,{children:"Read File"})," component for each file you want to ingest. Then, modify your script to upload each file, retrieve each returned file path, and then pass a unique file path to each ",(0,s.jsx)(t.strong,{children:"Read File"})," component ID."]}),"\n",(0,s.jsxs)(t.p,{children:["For example, you can modify ",(0,s.jsx)(t.code,{children:"tweaks"})," to accept multiple ",(0,s.jsx)(t.strong,{children:"Read File"})," components.\nThe following code is just an example; it isn't working code:"]}),"\n",(0,s.jsx)(d.Code,{codeConfig:h,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"## set multiple file paths",props:{style:{color:"#8B949E"}}}]},{tokens:[{content:"file_paths ",props:{style:{color:"#C9D1D9"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:" {",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" FILE_COMPONENT_1",props:{style:{color:"#79C0FF"}}},{content:": uploaded_path_1,",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" FILE_COMPONENT_2",props:{style:{color:"#79C0FF"}}},{content:": uploaded_path_2",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"}",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"def ",props:{style:{color:"#FF7B72"}}},{content:"chat_with_flow",props:{style:{color:"#D2A8FF"}}},{content:"(input_message, file_paths):",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:' """Compare the contents of these two files."""',props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:" run_url ",props:{style:{color:"#C9D1D9"}}},{content:"= f",props:{style:{color:"#FF7B72"}}},{content:'"',props:{style:{color:"#A5D6FF"}}},{content:"{LANGFLOW_SERVER_ADDRESS}",props:{style:{color:"#79C0FF"}}},{content:"/api/v1/run/",props:{style:{color:"#A5D6FF"}}},{content:"{FLOW_ID}",props:{style:{color:"#79C0FF"}}},{content:'"',props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:" # Prepare tweaks with both file paths",props:{style:{color:"#8B949E"}}}]},{tokens:[{content:" tweaks ",props:{style:{color:"#C9D1D9"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:" {}",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" for",props:{style:{color:"#FF7B72"}}},{content:" component_id, file_path ",props:{style:{color:"#C9D1D9"}}},{content:"in",props:{style:{color:"#FF7B72"}}},{content:" file_paths.items():",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" tweaks[component_id] ",props:{style:{color:"#C9D1D9"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:" {",props:{style:{color:"#C9D1D9"}}},{content:'"path"',props:{style:{color:"#A5D6FF"}}},{content:": file_path}",props:{style:{color:"#C9D1D9"}}}]}],lang:"python"},annotations:[]}]}),"\n",(0,s.jsxs)(t.p,{children:["You can also use a ",(0,s.jsxs)(t.a,{href:"/directory",children:[(0,s.jsx)(t.strong,{children:"Directory"})," component"]})," to load all files in a directory or pass an archive file to the ",(0,s.jsx)(t.strong,{children:"Read File"})," component."]}),"\n",(0,s.jsx)(t.h3,{id:"upload-external-files-at-runtime",children:"Upload external files at runtime"}),"\n",(0,s.jsxs)(t.p,{children:["To upload files from another machine that isn't your local environment, your Langflow server must first be accessible over the internet. Then, authenticated users can upload files to your public Langflow server's ",(0,s.jsx)(t.code,{children:"/v2/files/"})," endpoint, as shown in the tutorial. For more information, see ",(0,s.jsx)(t.a,{href:"/deployment-overview",children:"Langflow deployment overview"}),"."]}),"\n",(0,s.jsx)(t.h3,{id:"preload-files-outside-the-chat-session",children:"Preload files outside the chat session"}),"\n",(0,s.jsxs)(t.p,{children:["You can use the ",(0,s.jsx)(t.strong,{children:"Read File"})," component to load files anywhere in a flow, not just in a chat session."]}),"\n",(0,s.jsxs)(t.p,{children:["In the visual editor, you can preload files to the ",(0,s.jsx)(t.strong,{children:"Read File"})," component by selecting them from your local machine or ",(0,s.jsx)(t.a,{href:"/concepts-file-management",children:"Langflow file management"}),"."]}),"\n",(0,s.jsx)(t.p,{children:"For example, you can preload an instructions file for a prompt template, or you can preload a vector store with documents that you want to query in a Retrieval Augmented Generation (RAG) flow."}),"\n",(0,s.jsxs)(t.p,{children:["For more information about the ",(0,s.jsx)(t.strong,{children:"Read File"})," component and other data loading components, see the ",(0,s.jsxs)(t.a,{href:"/read-file",children:[(0,s.jsx)(t.strong,{children:"Read File"})," component"]}),"."]})]})}function f(e={}){const{wrapper:t}={...(0,r.R)(),...e.components};return t?(0,s.jsx)(t,{...e,children:(0,s.jsx)(y,{...e})}):y(e)}function D(e,t){throw new Error("Expected "+(t?"component":"object")+" `"+e+"` to be defined: you likely forgot to import, pass, or provide it.")}},87481:(e,t,o)=>{o.d(t,{A:()=>n});const n=o.p+"assets/files/fake-resume-fa337cbdb18306bd29e3168f73409745.txt"}}]); \ No newline at end of file diff --git a/assets/js/runtime~main.b43acfc0.js b/assets/js/runtime~main.de456ad1.js similarity index 99% rename from assets/js/runtime~main.b43acfc0.js rename to assets/js/runtime~main.de456ad1.js index 9763c99c86..cb9857844c 100644 --- a/assets/js/runtime~main.b43acfc0.js +++ b/assets/js/runtime~main.de456ad1.js @@ -1 +1 @@ -(()=>{"use strict";var e,a,f,d,b,c={},t={};function r(e){var a=t[e];if(void 0!==a)return a.exports;var f=t[e]={id:e,loaded:!1,exports:{}};return c[e].call(f.exports,f,f.exports,r),f.loaded=!0,f.exports}r.m=c,r.c=t,e=[],r.O=(a,f,d,b)=>{if(!f){var c=1/0;for(i=0;i=b)&&Object.keys(r.O).every(e=>r.O[e](f[o]))?f.splice(o--,1):(t=!1,b0&&e[i-1][2]>b;i--)e[i]=e[i-1];e[i]=[f,d,b]},r.n=e=>{var a=e&&e.__esModule?()=>e.default:()=>e;return r.d(a,{a:a}),a},f=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__,r.t=function(e,d){if(1&d&&(e=this(e)),8&d)return e;if("object"==typeof e&&e){if(4&d&&e.__esModule)return e;if(16&d&&"function"==typeof e.then)return e}var b=Object.create(null);r.r(b);var c={};a=a||[null,f({}),f([]),f(f)];for(var t=2&d&&e;"object"==typeof t&&!~a.indexOf(t);t=f(t))Object.getOwnPropertyNames(t).forEach(a=>c[a]=()=>e[a]);return c.default=()=>e,r.d(b,c),b},r.d=(e,a)=>{for(var f in a)r.o(a,f)&&!r.o(e,f)&&Object.defineProperty(e,f,{enumerable:!0,get:a[f]})},r.f={},r.e=e=>Promise.all(Object.keys(r.f).reduce((a,f)=>(r.f[f](e,a),a),[])),r.u=e=>"assets/js/"+({15:"d803fa53",30:"db8c087e",38:"a99a45c9",44:"e3f369d5",78:"b768a3a5",93:"a3702f61",126:"ae70dfbf",129:"dfa3dc90",253:"bb45d4f9",351:"b9acb8d9",360:"e4dcfb14",375:"3d81f1cf",446:"a4232cf8",534:"76e36fb0",596:"c2e0ed62",598:"db4f3bbd",600:"ee87c775",676:"7631f8d2",681:"ffa0f8b1",750:"33b5ee95",879:"8bee5443",883:"1dfb8d43",889:"08b309e9",953:"bd7e5f4a",956:"03735ec1",957:"c141421f",1006:"47e58a89",1162:"f7e6b9d6",1193:"444a6da6",1303:"41d45d82",1308:"ec030ab7",1345:"fe6d5b4f",1408:"2fc7e024",1446:"c78349fc",1490:"0f761898",1567:"22dd74f7",1703:"ff8bad6c",1861:"8ad67c3b",1876:"5c3b537a",1895:"d375ca1d",1966:"b1582da4",2076:"common",2102:"755d162a",2116:"0f1bef30",2138:"1a4e3797",2272:"ca5faf5d",2278:"c4280da9",2348:"f2da9399",2360:"017d425f",2394:"c2ea283c",2423:"19bcb67f",2457:"46abd5bb",2460:"954b19af",2469:"cd086441",2472:"62f97fbe",2475:"1ab69cbd",2565:"622fd833",2651:"8cd0650d",2741:"43ad9ba4",2752:"e14655eb",2888:"32270e71",2909:"144a43f5",2969:"f0ad3fbb",2990:"1d50b418",3035:"87b7bbd6",3038:"6df123cd",3140:"1a29c454",3147:"c83c70df",3164:"67f2dc6c",3240:"b079b393",3247:"f0b67137",3263:"730da84e",3284:"6398c398",3345:"040305fb",3353:"2b4d41d7",3359:"6d032186",3361:"8f633f11",3368:"efa0f9ee",3387:"3d67876e",3468:"c76bd485",3500:"c3c63498",3536:"2eb731bc",3683:"5a0b74d9",3992:"18dc6e4d",4036:"fbcfc90d",4085:"cb17b4e0",4090:"a8ca941b",4173:"d51059db",4263:"9a5e6f6b",4314:"f6a246db",4341:"e1a0f423",4351:"13786dcf",4356:"7b864b08",4384:"622bdc6f",4474:"3db73d6f",4573:"baacc2a1",4612:"6a9eca1a",4614:"e55b8e98",4644:"d3e886ab",4876:"44691977",4907:"86116998",4919:"ce43de4b",4995:"62266e9d",5045:"f2ec4536",5048:"3c440e04",5110:"e9fe1d10",5144:"944c5f91",5200:"ff7f32ba",5217:"fb0a7a3f",5270:"99931d31",5281:"eeeaec82",5333:"70909872",5343:"1b10d5ba",5397:"eba86ea4",5412:"a6d50436",5627:"e27c2ac1",5660:"1b208f60",5663:"b1379b2b",5734:"cef46d81",5739:"69079906",5742:"aba21aa0",5757:"ad42ff54",5838:"bbb8ec1d",5903:"69d616f2",5985:"e3536031",6108:"2fed9fb3",6224:"ef9aa223",6256:"6888b60e",6311:"cce672fb",6329:"a7b545c5",6459:"290c78e6",6513:"f13693f0",6538:"719cba95",6559:"7431813e",6601:"81bb6a5c",6801:"acefda8b",6839:"80866714",6999:"d5ec984b",7098:"a7bd4aaa",7118:"7996108c",7243:"5d9d4350",7356:"2ea623f2",7484:"ad01e028",7498:"e4400415",7502:"1a547ad8",7512:"4c09a7b3",7567:"4545d55b",7705:"2b91b6ca",7720:"3bfbe7c9",7807:"1a8a0a64",7824:"2b56b65e",7829:"7c27dc91",7859:"593d9d00",7902:"619c7267",7964:"ff35961a",7968:"9b0af131",8090:"6e85978c",8240:"0102a83b",8267:"02f8077b",8268:"a4b6c971",8269:"c7f91cbe",8294:"f2bedfce",8336:"e7fd9095",8381:"147f5874",8392:"20177945",8401:"17896441",8508:"10dd1586",8571:"da1ad91e",8593:"56350599",8607:"681e5335",8611:"0c23d011",8625:"3a9e0e6c",8649:"7de42fc9",8702:"42962acd",8750:"8a484c94",8765:"1a2eaade",8786:"614cb771",8822:"555ae514",8862:"e87b52ac",8963:"56c23a02",8990:"5f1a63c6",9033:"9f55b2fc",9048:"a94703ab",9213:"62d1268c",9227:"7e40e6b3",9264:"c7f32161",9315:"16faf8bf",9331:"ffcd190c",9363:"f3312674",9459:"97254d1d",9482:"a9c1003f",9522:"85dc2a2b",9610:"453ae64a",9640:"3b25a2ae",9647:"5e95c892",9674:"feac1fba",9712:"d8c8efb9",9758:"439d880a",9763:"aece522a",9781:"b796be74",9897:"f0eeb72e",9976:"230d5fdc",9986:"d1f3cfe5"}[e]||e)+"."+{15:"d4103b44",30:"5e412f6d",38:"3a4fac77",44:"6310a01a",78:"670c02e8",93:"622a1f88",126:"b234a8d7",129:"df86eec6",253:"35cb6896",351:"2a1a8be1",360:"d17e0b29",375:"b2953002",416:"bba44855",446:"c334deef",534:"795dab19",596:"7c1db8af",598:"5b1053df",600:"2a163757",676:"d9ff9a6d",681:"26c49a71",750:"aa0a84ad",879:"a07813c0",883:"a54ab8cd",889:"df4f3b30",953:"628fe802",956:"657667b5",957:"9350e3d5",1006:"7f9a6238",1083:"38f76bcf",1162:"12f31dbe",1193:"e8a52c78",1303:"cb77a67a",1308:"19ab43fe",1345:"66bea9d5",1408:"5cdd44e5",1446:"bc1d8376",1490:"7a3af458",1567:"8327ab0e",1703:"81ffc5c2",1861:"080fa5c2",1876:"198d048f",1895:"47c5ca9a",1966:"529c371f",2076:"a147e1aa",2102:"e04c4c2c",2116:"66ba19b7",2138:"b9e35d57",2237:"6bbae924",2272:"fe4b9a67",2278:"dc2f3640",2348:"4cb98c8a",2360:"b8419a64",2394:"2541a8c1",2423:"9a704566",2457:"473c611f",2460:"2ac05431",2469:"0c7b3f7c",2472:"dc63bd2c",2475:"95e18472",2565:"10b561f1",2651:"92578320",2693:"380feae7",2741:"5b07a55d",2752:"9575b8a2",2888:"603c895a",2909:"1e643600",2969:"51e6616d",2990:"244599e4",3035:"b2adcd04",3038:"746b5104",3140:"80d4a164",3147:"80f96c59",3164:"afb9b764",3240:"759d13b9",3247:"d418a16f",3263:"3d0f082d",3284:"36307cad",3345:"5569535b",3353:"f158ad34",3359:"7ff07aa0",3361:"e6042c27",3368:"ae419940",3387:"1e3dfa97",3468:"8ce253e7",3500:"efe030c8",3536:"6c16d55f",3683:"34100144",3992:"73fbda8d",4036:"15898141",4085:"0fd46b78",4090:"62a13c39",4115:"d07268e6",4173:"cff8d83a",4263:"a16a248b",4314:"2202791a",4341:"cf603161",4351:"0d5905f3",4356:"5405f198",4384:"727a5b43",4474:"d742b4c0",4573:"04372438",4612:"195892fa",4614:"e7c5fca9",4644:"75273c72",4754:"78f469df",4876:"227e7868",4907:"5ddf17c6",4919:"e665854e",4995:"ece12ff2",5045:"cca37a20",5048:"b43aa9f1",5110:"456d4c24",5144:"d825c9b4",5200:"dff043ce",5217:"393cf74c",5270:"cd08b649",5281:"4b19c528",5333:"f53e44bc",5343:"5c5f5f29",5397:"a8e80b52",5412:"0694303a",5480:"127c0842",5627:"8aad549c",5660:"57b46a92",5663:"c98a5d9f",5734:"89eb55f3",5739:"2a563c92",5742:"8cdbe811",5757:"c7a308e1",5838:"0993f6d4",5903:"3900f4c5",5985:"bc98da4a",6108:"365e2569",6224:"b8bf79da",6256:"a846f457",6311:"690fa063",6329:"a5b86d52",6459:"2463c0f5",6513:"13baf1e4",6538:"207e3a0a",6559:"91875c22",6601:"66f73f50",6801:"6897bd64",6839:"9c7bfd1a",6990:"2d009052",6999:"64627d58",7098:"e566890f",7118:"204687e4",7243:"930b5bd6",7356:"dc4b5e2f",7484:"87f5d367",7498:"bc1d0911",7502:"f4acd00b",7512:"33f7eed4",7567:"eddb6d25",7705:"16858a84",7720:"24a92496",7807:"9ed7d10f",7824:"48ec5133",7829:"5bfdb1e8",7859:"acd80658",7902:"b293db8d",7964:"b889e714",7968:"8658e795",8090:"3e91a2e5",8240:"d4f52412",8267:"53fed409",8268:"7ed10065",8269:"c3b18741",8287:"7f586667",8294:"e344768e",8336:"4c5df02d",8381:"cdc18a0f",8392:"32fde553",8401:"9b189e06",8508:"e9d8e178",8571:"e11e0da7",8593:"e0584060",8607:"3c24e2c5",8611:"03e3ae2a",8625:"d22660bd",8649:"540f0784",8702:"046f5c3a",8750:"56e811df",8765:"c381c5fb",8786:"f1e32c3e",8822:"77921987",8862:"2272a76a",8913:"fd271a57",8963:"66693d3f",8990:"9bb3ef07",9033:"11737f6f",9048:"fbe061ed",9213:"7dd93294",9227:"a58d07fa",9264:"924f1a5d",9315:"167ce0df",9331:"b33d24ee",9363:"66313398",9459:"bcd99a3a",9482:"d79e999d",9522:"9a97e8c5",9610:"1ecfdc0a",9640:"8da65214",9647:"a3e58221",9674:"078d3e13",9712:"f5eaa1ca",9758:"5f1367ed",9763:"8017d111",9781:"c9db232c",9897:"cb0ce060",9976:"32ddde62",9986:"87289072"}[e]+".js",r.miniCssF=e=>{},r.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),r.o=(e,a)=>Object.prototype.hasOwnProperty.call(e,a),d={},b="langflow-docs:",r.l=(e,a,f,c)=>{if(d[e])d[e].push(a);else{var t,o;if(void 0!==f)for(var n=document.getElementsByTagName("script"),i=0;i{t.onerror=t.onload=null,clearTimeout(s);var b=d[e];if(delete d[e],t.parentNode&&t.parentNode.removeChild(t),b&&b.forEach(e=>e(f)),a)return a(f)},s=setTimeout(u.bind(null,void 0,{type:"timeout",target:t}),12e4);t.onerror=u.bind(null,t.onerror),t.onload=u.bind(null,t.onload),o&&document.head.appendChild(t)}},r.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.nmd=e=>(e.paths=[],e.children||(e.children=[]),e),r.p="/",r.gca=function(e){return e={17896441:"8401",20177945:"8392",44691977:"4876",56350599:"8593",69079906:"5739",70909872:"5333",80866714:"6839",86116998:"4907",d803fa53:"15",db8c087e:"30",a99a45c9:"38",e3f369d5:"44",b768a3a5:"78",a3702f61:"93",ae70dfbf:"126",dfa3dc90:"129",bb45d4f9:"253",b9acb8d9:"351",e4dcfb14:"360","3d81f1cf":"375",a4232cf8:"446","76e36fb0":"534",c2e0ed62:"596",db4f3bbd:"598",ee87c775:"600","7631f8d2":"676",ffa0f8b1:"681","33b5ee95":"750","8bee5443":"879","1dfb8d43":"883","08b309e9":"889",bd7e5f4a:"953","03735ec1":"956",c141421f:"957","47e58a89":"1006",f7e6b9d6:"1162","444a6da6":"1193","41d45d82":"1303",ec030ab7:"1308",fe6d5b4f:"1345","2fc7e024":"1408",c78349fc:"1446","0f761898":"1490","22dd74f7":"1567",ff8bad6c:"1703","8ad67c3b":"1861","5c3b537a":"1876",d375ca1d:"1895",b1582da4:"1966",common:"2076","755d162a":"2102","0f1bef30":"2116","1a4e3797":"2138",ca5faf5d:"2272",c4280da9:"2278",f2da9399:"2348","017d425f":"2360",c2ea283c:"2394","19bcb67f":"2423","46abd5bb":"2457","954b19af":"2460",cd086441:"2469","62f97fbe":"2472","1ab69cbd":"2475","622fd833":"2565","8cd0650d":"2651","43ad9ba4":"2741",e14655eb:"2752","32270e71":"2888","144a43f5":"2909",f0ad3fbb:"2969","1d50b418":"2990","87b7bbd6":"3035","6df123cd":"3038","1a29c454":"3140",c83c70df:"3147","67f2dc6c":"3164",b079b393:"3240",f0b67137:"3247","730da84e":"3263","6398c398":"3284","040305fb":"3345","2b4d41d7":"3353","6d032186":"3359","8f633f11":"3361",efa0f9ee:"3368","3d67876e":"3387",c76bd485:"3468",c3c63498:"3500","2eb731bc":"3536","5a0b74d9":"3683","18dc6e4d":"3992",fbcfc90d:"4036",cb17b4e0:"4085",a8ca941b:"4090",d51059db:"4173","9a5e6f6b":"4263",f6a246db:"4314",e1a0f423:"4341","13786dcf":"4351","7b864b08":"4356","622bdc6f":"4384","3db73d6f":"4474",baacc2a1:"4573","6a9eca1a":"4612",e55b8e98:"4614",d3e886ab:"4644",ce43de4b:"4919","62266e9d":"4995",f2ec4536:"5045","3c440e04":"5048",e9fe1d10:"5110","944c5f91":"5144",ff7f32ba:"5200",fb0a7a3f:"5217","99931d31":"5270",eeeaec82:"5281","1b10d5ba":"5343",eba86ea4:"5397",a6d50436:"5412",e27c2ac1:"5627","1b208f60":"5660",b1379b2b:"5663",cef46d81:"5734",aba21aa0:"5742",ad42ff54:"5757",bbb8ec1d:"5838","69d616f2":"5903",e3536031:"5985","2fed9fb3":"6108",ef9aa223:"6224","6888b60e":"6256",cce672fb:"6311",a7b545c5:"6329","290c78e6":"6459",f13693f0:"6513","719cba95":"6538","7431813e":"6559","81bb6a5c":"6601",acefda8b:"6801",d5ec984b:"6999",a7bd4aaa:"7098","7996108c":"7118","5d9d4350":"7243","2ea623f2":"7356",ad01e028:"7484",e4400415:"7498","1a547ad8":"7502","4c09a7b3":"7512","4545d55b":"7567","2b91b6ca":"7705","3bfbe7c9":"7720","1a8a0a64":"7807","2b56b65e":"7824","7c27dc91":"7829","593d9d00":"7859","619c7267":"7902",ff35961a:"7964","9b0af131":"7968","6e85978c":"8090","0102a83b":"8240","02f8077b":"8267",a4b6c971:"8268",c7f91cbe:"8269",f2bedfce:"8294",e7fd9095:"8336","147f5874":"8381","10dd1586":"8508",da1ad91e:"8571","681e5335":"8607","0c23d011":"8611","3a9e0e6c":"8625","7de42fc9":"8649","42962acd":"8702","8a484c94":"8750","1a2eaade":"8765","614cb771":"8786","555ae514":"8822",e87b52ac:"8862","56c23a02":"8963","5f1a63c6":"8990","9f55b2fc":"9033",a94703ab:"9048","62d1268c":"9213","7e40e6b3":"9227",c7f32161:"9264","16faf8bf":"9315",ffcd190c:"9331",f3312674:"9363","97254d1d":"9459",a9c1003f:"9482","85dc2a2b":"9522","453ae64a":"9610","3b25a2ae":"9640","5e95c892":"9647",feac1fba:"9674",d8c8efb9:"9712","439d880a":"9758",aece522a:"9763",b796be74:"9781",f0eeb72e:"9897","230d5fdc":"9976",d1f3cfe5:"9986"}[e]||e,r.p+r.u(e)},(()=>{var e={5354:0,1869:0};r.f.j=(a,f)=>{var d=r.o(e,a)?e[a]:void 0;if(0!==d)if(d)f.push(d[2]);else if(/^(1869|5354)$/.test(a))e[a]=0;else{var b=new Promise((f,b)=>d=e[a]=[f,b]);f.push(d[2]=b);var c=r.p+r.u(a),t=new Error;r.l(c,f=>{if(r.o(e,a)&&(0!==(d=e[a])&&(e[a]=void 0),d)){var b=f&&("load"===f.type?"missing":f.type),c=f&&f.target&&f.target.src;t.message="Loading chunk "+a+" failed.\n("+b+": "+c+")",t.name="ChunkLoadError",t.type=b,t.request=c,d[1](t)}},"chunk-"+a,a)}},r.O.j=a=>0===e[a];var a=(a,f)=>{var d,b,[c,t,o]=f,n=0;if(c.some(a=>0!==e[a])){for(d in t)r.o(t,d)&&(r.m[d]=t[d]);if(o)var i=o(r)}for(a&&a(f);n{"use strict";var e,a,f,d,b,c={},t={};function r(e){var a=t[e];if(void 0!==a)return a.exports;var f=t[e]={id:e,loaded:!1,exports:{}};return c[e].call(f.exports,f,f.exports,r),f.loaded=!0,f.exports}r.m=c,r.c=t,e=[],r.O=(a,f,d,b)=>{if(!f){var c=1/0;for(i=0;i=b)&&Object.keys(r.O).every(e=>r.O[e](f[o]))?f.splice(o--,1):(t=!1,b0&&e[i-1][2]>b;i--)e[i]=e[i-1];e[i]=[f,d,b]},r.n=e=>{var a=e&&e.__esModule?()=>e.default:()=>e;return r.d(a,{a:a}),a},f=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__,r.t=function(e,d){if(1&d&&(e=this(e)),8&d)return e;if("object"==typeof e&&e){if(4&d&&e.__esModule)return e;if(16&d&&"function"==typeof e.then)return e}var b=Object.create(null);r.r(b);var c={};a=a||[null,f({}),f([]),f(f)];for(var t=2&d&&e;"object"==typeof t&&!~a.indexOf(t);t=f(t))Object.getOwnPropertyNames(t).forEach(a=>c[a]=()=>e[a]);return c.default=()=>e,r.d(b,c),b},r.d=(e,a)=>{for(var f in a)r.o(a,f)&&!r.o(e,f)&&Object.defineProperty(e,f,{enumerable:!0,get:a[f]})},r.f={},r.e=e=>Promise.all(Object.keys(r.f).reduce((a,f)=>(r.f[f](e,a),a),[])),r.u=e=>"assets/js/"+({15:"d803fa53",30:"db8c087e",38:"a99a45c9",44:"e3f369d5",78:"b768a3a5",93:"a3702f61",126:"ae70dfbf",129:"dfa3dc90",253:"bb45d4f9",351:"b9acb8d9",360:"e4dcfb14",375:"3d81f1cf",446:"a4232cf8",534:"76e36fb0",596:"c2e0ed62",598:"db4f3bbd",600:"ee87c775",676:"7631f8d2",681:"ffa0f8b1",750:"33b5ee95",879:"8bee5443",883:"1dfb8d43",889:"08b309e9",953:"bd7e5f4a",956:"03735ec1",957:"c141421f",1006:"47e58a89",1162:"f7e6b9d6",1193:"444a6da6",1303:"41d45d82",1308:"ec030ab7",1345:"fe6d5b4f",1408:"2fc7e024",1446:"c78349fc",1490:"0f761898",1567:"22dd74f7",1703:"ff8bad6c",1861:"8ad67c3b",1876:"5c3b537a",1895:"d375ca1d",1966:"b1582da4",2076:"common",2102:"755d162a",2116:"0f1bef30",2138:"1a4e3797",2272:"ca5faf5d",2278:"c4280da9",2348:"f2da9399",2360:"017d425f",2394:"c2ea283c",2423:"19bcb67f",2457:"46abd5bb",2460:"954b19af",2469:"cd086441",2472:"62f97fbe",2475:"1ab69cbd",2565:"622fd833",2651:"8cd0650d",2741:"43ad9ba4",2752:"e14655eb",2888:"32270e71",2909:"144a43f5",2969:"f0ad3fbb",2990:"1d50b418",3035:"87b7bbd6",3038:"6df123cd",3140:"1a29c454",3147:"c83c70df",3164:"67f2dc6c",3240:"b079b393",3247:"f0b67137",3263:"730da84e",3284:"6398c398",3345:"040305fb",3353:"2b4d41d7",3359:"6d032186",3361:"8f633f11",3368:"efa0f9ee",3387:"3d67876e",3468:"c76bd485",3500:"c3c63498",3536:"2eb731bc",3683:"5a0b74d9",3992:"18dc6e4d",4036:"fbcfc90d",4085:"cb17b4e0",4090:"a8ca941b",4173:"d51059db",4263:"9a5e6f6b",4314:"f6a246db",4341:"e1a0f423",4351:"13786dcf",4356:"7b864b08",4384:"622bdc6f",4474:"3db73d6f",4573:"baacc2a1",4612:"6a9eca1a",4614:"e55b8e98",4644:"d3e886ab",4876:"44691977",4907:"86116998",4919:"ce43de4b",4995:"62266e9d",5045:"f2ec4536",5048:"3c440e04",5110:"e9fe1d10",5144:"944c5f91",5200:"ff7f32ba",5217:"fb0a7a3f",5270:"99931d31",5281:"eeeaec82",5333:"70909872",5343:"1b10d5ba",5397:"eba86ea4",5412:"a6d50436",5627:"e27c2ac1",5660:"1b208f60",5663:"b1379b2b",5734:"cef46d81",5739:"69079906",5742:"aba21aa0",5757:"ad42ff54",5838:"bbb8ec1d",5903:"69d616f2",5985:"e3536031",6108:"2fed9fb3",6224:"ef9aa223",6256:"6888b60e",6311:"cce672fb",6329:"a7b545c5",6459:"290c78e6",6513:"f13693f0",6538:"719cba95",6559:"7431813e",6601:"81bb6a5c",6801:"acefda8b",6839:"80866714",6999:"d5ec984b",7098:"a7bd4aaa",7118:"7996108c",7243:"5d9d4350",7356:"2ea623f2",7484:"ad01e028",7498:"e4400415",7502:"1a547ad8",7512:"4c09a7b3",7567:"4545d55b",7705:"2b91b6ca",7720:"3bfbe7c9",7807:"1a8a0a64",7824:"2b56b65e",7829:"7c27dc91",7859:"593d9d00",7902:"619c7267",7964:"ff35961a",7968:"9b0af131",8090:"6e85978c",8240:"0102a83b",8267:"02f8077b",8268:"a4b6c971",8269:"c7f91cbe",8294:"f2bedfce",8336:"e7fd9095",8381:"147f5874",8392:"20177945",8401:"17896441",8508:"10dd1586",8571:"da1ad91e",8593:"56350599",8607:"681e5335",8611:"0c23d011",8625:"3a9e0e6c",8649:"7de42fc9",8702:"42962acd",8750:"8a484c94",8765:"1a2eaade",8786:"614cb771",8822:"555ae514",8862:"e87b52ac",8963:"56c23a02",8990:"5f1a63c6",9033:"9f55b2fc",9048:"a94703ab",9213:"62d1268c",9227:"7e40e6b3",9264:"c7f32161",9315:"16faf8bf",9331:"ffcd190c",9363:"f3312674",9459:"97254d1d",9482:"a9c1003f",9522:"85dc2a2b",9610:"453ae64a",9640:"3b25a2ae",9647:"5e95c892",9674:"feac1fba",9712:"d8c8efb9",9758:"439d880a",9763:"aece522a",9781:"b796be74",9897:"f0eeb72e",9976:"230d5fdc",9986:"d1f3cfe5"}[e]||e)+"."+{15:"d4103b44",30:"5e412f6d",38:"3a4fac77",44:"6310a01a",78:"670c02e8",93:"622a1f88",126:"b234a8d7",129:"df86eec6",253:"35cb6896",351:"2a1a8be1",360:"d17e0b29",375:"b2953002",416:"bba44855",446:"c334deef",534:"795dab19",596:"7c1db8af",598:"5b1053df",600:"2a163757",676:"d9ff9a6d",681:"26c49a71",750:"aa0a84ad",879:"a07813c0",883:"a54ab8cd",889:"df4f3b30",953:"628fe802",956:"657667b5",957:"9350e3d5",1006:"7f9a6238",1083:"38f76bcf",1162:"12f31dbe",1193:"e8a52c78",1303:"cb77a67a",1308:"19ab43fe",1345:"66bea9d5",1408:"88a7766e",1446:"bc1d8376",1490:"7a3af458",1567:"8327ab0e",1703:"81ffc5c2",1861:"080fa5c2",1876:"198d048f",1895:"47c5ca9a",1966:"529c371f",2076:"a147e1aa",2102:"e04c4c2c",2116:"66ba19b7",2138:"b9e35d57",2237:"6bbae924",2272:"fe4b9a67",2278:"dc2f3640",2348:"4cb98c8a",2360:"b8419a64",2394:"2541a8c1",2423:"9a704566",2457:"473c611f",2460:"2ac05431",2469:"0c7b3f7c",2472:"dc63bd2c",2475:"95e18472",2565:"10b561f1",2651:"92578320",2693:"380feae7",2741:"5b07a55d",2752:"9575b8a2",2888:"603c895a",2909:"1e643600",2969:"51e6616d",2990:"244599e4",3035:"b2adcd04",3038:"746b5104",3140:"80d4a164",3147:"80f96c59",3164:"afb9b764",3240:"759d13b9",3247:"d418a16f",3263:"3d0f082d",3284:"36307cad",3345:"5569535b",3353:"f158ad34",3359:"7ff07aa0",3361:"e6042c27",3368:"ae419940",3387:"1e3dfa97",3468:"8ce253e7",3500:"efe030c8",3536:"6c16d55f",3683:"34100144",3992:"73fbda8d",4036:"15898141",4085:"0fd46b78",4090:"62a13c39",4115:"d07268e6",4173:"cff8d83a",4263:"a16a248b",4314:"2202791a",4341:"cf603161",4351:"0d5905f3",4356:"5405f198",4384:"727a5b43",4474:"d742b4c0",4573:"04372438",4612:"195892fa",4614:"e7c5fca9",4644:"75273c72",4754:"78f469df",4876:"227e7868",4907:"5ddf17c6",4919:"e665854e",4995:"ece12ff2",5045:"cca37a20",5048:"b43aa9f1",5110:"456d4c24",5144:"d825c9b4",5200:"dff043ce",5217:"393cf74c",5270:"cd08b649",5281:"4b19c528",5333:"f53e44bc",5343:"5c5f5f29",5397:"a8e80b52",5412:"0694303a",5480:"127c0842",5627:"8aad549c",5660:"57b46a92",5663:"c98a5d9f",5734:"89eb55f3",5739:"2a563c92",5742:"8cdbe811",5757:"c7a308e1",5838:"0993f6d4",5903:"3900f4c5",5985:"bc98da4a",6108:"365e2569",6224:"b8bf79da",6256:"a846f457",6311:"690fa063",6329:"a5b86d52",6459:"2463c0f5",6513:"13baf1e4",6538:"207e3a0a",6559:"91875c22",6601:"66f73f50",6801:"6897bd64",6839:"9c7bfd1a",6990:"2d009052",6999:"64627d58",7098:"e566890f",7118:"204687e4",7243:"930b5bd6",7356:"dc4b5e2f",7484:"87f5d367",7498:"bc1d0911",7502:"f4acd00b",7512:"33f7eed4",7567:"eddb6d25",7705:"16858a84",7720:"24a92496",7807:"9ed7d10f",7824:"20952bb6",7829:"5bfdb1e8",7859:"acd80658",7902:"b293db8d",7964:"b889e714",7968:"8658e795",8090:"3e91a2e5",8240:"d4f52412",8267:"53fed409",8268:"7ed10065",8269:"c3b18741",8287:"7f586667",8294:"e344768e",8336:"4c5df02d",8381:"cdc18a0f",8392:"32fde553",8401:"9b189e06",8508:"e9d8e178",8571:"e11e0da7",8593:"e0584060",8607:"3c24e2c5",8611:"03e3ae2a",8625:"d22660bd",8649:"540f0784",8702:"046f5c3a",8750:"56e811df",8765:"c381c5fb",8786:"f1e32c3e",8822:"77921987",8862:"2272a76a",8913:"fd271a57",8963:"66693d3f",8990:"9bb3ef07",9033:"11737f6f",9048:"fbe061ed",9213:"7dd93294",9227:"a58d07fa",9264:"924f1a5d",9315:"167ce0df",9331:"b33d24ee",9363:"66313398",9459:"bcd99a3a",9482:"d79e999d",9522:"9a97e8c5",9610:"1ecfdc0a",9640:"8da65214",9647:"a3e58221",9674:"078d3e13",9712:"f5eaa1ca",9758:"5f1367ed",9763:"8017d111",9781:"c9db232c",9897:"cb0ce060",9976:"32ddde62",9986:"87289072"}[e]+".js",r.miniCssF=e=>{},r.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),r.o=(e,a)=>Object.prototype.hasOwnProperty.call(e,a),d={},b="langflow-docs:",r.l=(e,a,f,c)=>{if(d[e])d[e].push(a);else{var t,o;if(void 0!==f)for(var n=document.getElementsByTagName("script"),i=0;i{t.onerror=t.onload=null,clearTimeout(s);var b=d[e];if(delete d[e],t.parentNode&&t.parentNode.removeChild(t),b&&b.forEach(e=>e(f)),a)return a(f)},s=setTimeout(u.bind(null,void 0,{type:"timeout",target:t}),12e4);t.onerror=u.bind(null,t.onerror),t.onload=u.bind(null,t.onload),o&&document.head.appendChild(t)}},r.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.nmd=e=>(e.paths=[],e.children||(e.children=[]),e),r.p="/",r.gca=function(e){return e={17896441:"8401",20177945:"8392",44691977:"4876",56350599:"8593",69079906:"5739",70909872:"5333",80866714:"6839",86116998:"4907",d803fa53:"15",db8c087e:"30",a99a45c9:"38",e3f369d5:"44",b768a3a5:"78",a3702f61:"93",ae70dfbf:"126",dfa3dc90:"129",bb45d4f9:"253",b9acb8d9:"351",e4dcfb14:"360","3d81f1cf":"375",a4232cf8:"446","76e36fb0":"534",c2e0ed62:"596",db4f3bbd:"598",ee87c775:"600","7631f8d2":"676",ffa0f8b1:"681","33b5ee95":"750","8bee5443":"879","1dfb8d43":"883","08b309e9":"889",bd7e5f4a:"953","03735ec1":"956",c141421f:"957","47e58a89":"1006",f7e6b9d6:"1162","444a6da6":"1193","41d45d82":"1303",ec030ab7:"1308",fe6d5b4f:"1345","2fc7e024":"1408",c78349fc:"1446","0f761898":"1490","22dd74f7":"1567",ff8bad6c:"1703","8ad67c3b":"1861","5c3b537a":"1876",d375ca1d:"1895",b1582da4:"1966",common:"2076","755d162a":"2102","0f1bef30":"2116","1a4e3797":"2138",ca5faf5d:"2272",c4280da9:"2278",f2da9399:"2348","017d425f":"2360",c2ea283c:"2394","19bcb67f":"2423","46abd5bb":"2457","954b19af":"2460",cd086441:"2469","62f97fbe":"2472","1ab69cbd":"2475","622fd833":"2565","8cd0650d":"2651","43ad9ba4":"2741",e14655eb:"2752","32270e71":"2888","144a43f5":"2909",f0ad3fbb:"2969","1d50b418":"2990","87b7bbd6":"3035","6df123cd":"3038","1a29c454":"3140",c83c70df:"3147","67f2dc6c":"3164",b079b393:"3240",f0b67137:"3247","730da84e":"3263","6398c398":"3284","040305fb":"3345","2b4d41d7":"3353","6d032186":"3359","8f633f11":"3361",efa0f9ee:"3368","3d67876e":"3387",c76bd485:"3468",c3c63498:"3500","2eb731bc":"3536","5a0b74d9":"3683","18dc6e4d":"3992",fbcfc90d:"4036",cb17b4e0:"4085",a8ca941b:"4090",d51059db:"4173","9a5e6f6b":"4263",f6a246db:"4314",e1a0f423:"4341","13786dcf":"4351","7b864b08":"4356","622bdc6f":"4384","3db73d6f":"4474",baacc2a1:"4573","6a9eca1a":"4612",e55b8e98:"4614",d3e886ab:"4644",ce43de4b:"4919","62266e9d":"4995",f2ec4536:"5045","3c440e04":"5048",e9fe1d10:"5110","944c5f91":"5144",ff7f32ba:"5200",fb0a7a3f:"5217","99931d31":"5270",eeeaec82:"5281","1b10d5ba":"5343",eba86ea4:"5397",a6d50436:"5412",e27c2ac1:"5627","1b208f60":"5660",b1379b2b:"5663",cef46d81:"5734",aba21aa0:"5742",ad42ff54:"5757",bbb8ec1d:"5838","69d616f2":"5903",e3536031:"5985","2fed9fb3":"6108",ef9aa223:"6224","6888b60e":"6256",cce672fb:"6311",a7b545c5:"6329","290c78e6":"6459",f13693f0:"6513","719cba95":"6538","7431813e":"6559","81bb6a5c":"6601",acefda8b:"6801",d5ec984b:"6999",a7bd4aaa:"7098","7996108c":"7118","5d9d4350":"7243","2ea623f2":"7356",ad01e028:"7484",e4400415:"7498","1a547ad8":"7502","4c09a7b3":"7512","4545d55b":"7567","2b91b6ca":"7705","3bfbe7c9":"7720","1a8a0a64":"7807","2b56b65e":"7824","7c27dc91":"7829","593d9d00":"7859","619c7267":"7902",ff35961a:"7964","9b0af131":"7968","6e85978c":"8090","0102a83b":"8240","02f8077b":"8267",a4b6c971:"8268",c7f91cbe:"8269",f2bedfce:"8294",e7fd9095:"8336","147f5874":"8381","10dd1586":"8508",da1ad91e:"8571","681e5335":"8607","0c23d011":"8611","3a9e0e6c":"8625","7de42fc9":"8649","42962acd":"8702","8a484c94":"8750","1a2eaade":"8765","614cb771":"8786","555ae514":"8822",e87b52ac:"8862","56c23a02":"8963","5f1a63c6":"8990","9f55b2fc":"9033",a94703ab:"9048","62d1268c":"9213","7e40e6b3":"9227",c7f32161:"9264","16faf8bf":"9315",ffcd190c:"9331",f3312674:"9363","97254d1d":"9459",a9c1003f:"9482","85dc2a2b":"9522","453ae64a":"9610","3b25a2ae":"9640","5e95c892":"9647",feac1fba:"9674",d8c8efb9:"9712","439d880a":"9758",aece522a:"9763",b796be74:"9781",f0eeb72e:"9897","230d5fdc":"9976",d1f3cfe5:"9986"}[e]||e,r.p+r.u(e)},(()=>{var e={5354:0,1869:0};r.f.j=(a,f)=>{var d=r.o(e,a)?e[a]:void 0;if(0!==d)if(d)f.push(d[2]);else if(/^(1869|5354)$/.test(a))e[a]=0;else{var b=new Promise((f,b)=>d=e[a]=[f,b]);f.push(d[2]=b);var c=r.p+r.u(a),t=new Error;r.l(c,f=>{if(r.o(e,a)&&(0!==(d=e[a])&&(e[a]=void 0),d)){var b=f&&("load"===f.type?"missing":f.type),c=f&&f.target&&f.target.src;t.message="Loading chunk "+a+" failed.\n("+b+": "+c+")",t.name="ChunkLoadError",t.type=b,t.request=c,d[1](t)}},"chunk-"+a,a)}},r.O.j=a=>0===e[a];var a=(a,f)=>{var d,b,[c,t,o]=f,n=0;if(c.some(a=>0!==e[a])){for(d in t)r.o(t,d)&&(r.m[d]=t[d]);if(o)var i=o(r)}for(a&&a(f);n - + diff --git a/bundles-agentics.html b/bundles-agentics.html index 25b792072c..59fb7fb373 100644 --- a/bundles-agentics.html +++ b/bundles-agentics.html @@ -25,7 +25,7 @@ - + diff --git a/bundles-aiml.html b/bundles-aiml.html index e7807fd561..f86c51ae66 100644 --- a/bundles-aiml.html +++ b/bundles-aiml.html @@ -25,7 +25,7 @@ - + diff --git a/bundles-altk.html b/bundles-altk.html index cedc7a71a8..8600d2fbca 100644 --- a/bundles-altk.html +++ b/bundles-altk.html @@ -25,7 +25,7 @@ - + diff --git a/bundles-amazon.html b/bundles-amazon.html index 3b53af1aba..e47c05fe27 100644 --- a/bundles-amazon.html +++ b/bundles-amazon.html @@ -25,7 +25,7 @@ - + diff --git a/bundles-anthropic.html b/bundles-anthropic.html index f97ad08d66..3eba56f382 100644 --- a/bundles-anthropic.html +++ b/bundles-anthropic.html @@ -25,7 +25,7 @@ - + diff --git a/bundles-apify.html b/bundles-apify.html index 0d5eccf054..d54017fae5 100644 --- a/bundles-apify.html +++ b/bundles-apify.html @@ -25,7 +25,7 @@ - + diff --git a/bundles-arxiv.html b/bundles-arxiv.html index 897d58bf25..9a36b6b473 100644 --- a/bundles-arxiv.html +++ b/bundles-arxiv.html @@ -25,7 +25,7 @@ - + diff --git a/bundles-assemblyai.html b/bundles-assemblyai.html index 55b8f1084a..34f4feab88 100644 --- a/bundles-assemblyai.html +++ b/bundles-assemblyai.html @@ -25,7 +25,7 @@ - + diff --git a/bundles-azure.html b/bundles-azure.html index ae3604b615..0afc4a98a3 100644 --- a/bundles-azure.html +++ b/bundles-azure.html @@ -25,7 +25,7 @@ - + diff --git a/bundles-baidu.html b/bundles-baidu.html index f4196bf9bc..49d0f0c9bd 100644 --- a/bundles-baidu.html +++ b/bundles-baidu.html @@ -25,7 +25,7 @@ - + diff --git a/bundles-bing.html b/bundles-bing.html index 320e258b33..2605469823 100644 --- a/bundles-bing.html +++ b/bundles-bing.html @@ -25,7 +25,7 @@ - + diff --git a/bundles-cassandra.html b/bundles-cassandra.html index 12446fbbf1..441a4bf061 100644 --- a/bundles-cassandra.html +++ b/bundles-cassandra.html @@ -25,7 +25,7 @@ - + diff --git a/bundles-chroma.html b/bundles-chroma.html index 795f90c008..6f17d9d8fc 100644 --- a/bundles-chroma.html +++ b/bundles-chroma.html @@ -25,7 +25,7 @@ - + diff --git a/bundles-cleanlab.html b/bundles-cleanlab.html index e6b48a64d7..14fb5dbf34 100644 --- a/bundles-cleanlab.html +++ b/bundles-cleanlab.html @@ -25,7 +25,7 @@ - + diff --git a/bundles-clickhouse.html b/bundles-clickhouse.html index bbb412afa9..07c20a94b5 100644 --- a/bundles-clickhouse.html +++ b/bundles-clickhouse.html @@ -25,7 +25,7 @@ - + diff --git a/bundles-cloudflare.html b/bundles-cloudflare.html index ddcf1ddafc..f174a0f7c2 100644 --- a/bundles-cloudflare.html +++ b/bundles-cloudflare.html @@ -25,7 +25,7 @@ - + diff --git a/bundles-cohere.html b/bundles-cohere.html index fa4a2f7f23..16b5f45796 100644 --- a/bundles-cohere.html +++ b/bundles-cohere.html @@ -25,7 +25,7 @@ - + diff --git a/bundles-cometapi.html b/bundles-cometapi.html index dc91c317d5..9ca2cb393f 100644 --- a/bundles-cometapi.html +++ b/bundles-cometapi.html @@ -25,7 +25,7 @@ - + diff --git a/bundles-composio.html b/bundles-composio.html index d43febd49c..1b083bb9bf 100644 --- a/bundles-composio.html +++ b/bundles-composio.html @@ -25,7 +25,7 @@ - + diff --git a/bundles-couchbase.html b/bundles-couchbase.html index 7fbdd4a7fa..0e76db384a 100644 --- a/bundles-couchbase.html +++ b/bundles-couchbase.html @@ -25,7 +25,7 @@ - + diff --git a/bundles-cuga.html b/bundles-cuga.html index 958c631062..51337dd085 100644 --- a/bundles-cuga.html +++ b/bundles-cuga.html @@ -25,7 +25,7 @@ - + diff --git a/bundles-datastax.html b/bundles-datastax.html index 8d76e82a4b..4a311839ce 100644 --- a/bundles-datastax.html +++ b/bundles-datastax.html @@ -25,7 +25,7 @@ - + diff --git a/bundles-deepseek.html b/bundles-deepseek.html index e49bb7d59f..868016b6c5 100644 --- a/bundles-deepseek.html +++ b/bundles-deepseek.html @@ -25,7 +25,7 @@ - + diff --git a/bundles-docling.html b/bundles-docling.html index 5f43691f3d..98f7b9944a 100644 --- a/bundles-docling.html +++ b/bundles-docling.html @@ -25,7 +25,7 @@ - + diff --git a/bundles-duckduckgo.html b/bundles-duckduckgo.html index 1d6dbac502..8b0ab914ed 100644 --- a/bundles-duckduckgo.html +++ b/bundles-duckduckgo.html @@ -25,7 +25,7 @@ - + diff --git a/bundles-elastic.html b/bundles-elastic.html index 9ec1aeadbb..f5ecd10cdd 100644 --- a/bundles-elastic.html +++ b/bundles-elastic.html @@ -25,7 +25,7 @@ - + diff --git a/bundles-exa.html b/bundles-exa.html index d935d32599..d1d2621d8c 100644 --- a/bundles-exa.html +++ b/bundles-exa.html @@ -25,7 +25,7 @@ - + diff --git a/bundles-faiss.html b/bundles-faiss.html index 901000cd80..081e970af2 100644 --- a/bundles-faiss.html +++ b/bundles-faiss.html @@ -25,7 +25,7 @@ - + diff --git a/bundles-glean.html b/bundles-glean.html index 1ac00c380e..6ed8c23d0f 100644 --- a/bundles-glean.html +++ b/bundles-glean.html @@ -25,7 +25,7 @@ - + diff --git a/bundles-google.html b/bundles-google.html index d96b1c8d8c..b4d052e68e 100644 --- a/bundles-google.html +++ b/bundles-google.html @@ -25,7 +25,7 @@ - + diff --git a/bundles-groq.html b/bundles-groq.html index 9f6775c4c7..08e03d321d 100644 --- a/bundles-groq.html +++ b/bundles-groq.html @@ -25,7 +25,7 @@ - + diff --git a/bundles-huggingface.html b/bundles-huggingface.html index 06225f3c71..26d3e01d77 100644 --- a/bundles-huggingface.html +++ b/bundles-huggingface.html @@ -25,7 +25,7 @@ - + diff --git a/bundles-ibm.html b/bundles-ibm.html index 6cf406ade6..31d475d84a 100644 --- a/bundles-ibm.html +++ b/bundles-ibm.html @@ -25,7 +25,7 @@ - + diff --git a/bundles-icosacomputing.html b/bundles-icosacomputing.html index 55190fb9f9..02ee14b19f 100644 --- a/bundles-icosacomputing.html +++ b/bundles-icosacomputing.html @@ -25,7 +25,7 @@ - + diff --git a/bundles-langchain.html b/bundles-langchain.html index 680d944ff9..9b50e600b8 100644 --- a/bundles-langchain.html +++ b/bundles-langchain.html @@ -25,7 +25,7 @@ - + diff --git a/bundles-lite-llm.html b/bundles-lite-llm.html index 51f36c129f..080b16a113 100644 --- a/bundles-lite-llm.html +++ b/bundles-lite-llm.html @@ -25,7 +25,7 @@ - + diff --git a/bundles-lmstudio.html b/bundles-lmstudio.html index 33e0f8e05c..66a6b9848c 100644 --- a/bundles-lmstudio.html +++ b/bundles-lmstudio.html @@ -25,7 +25,7 @@ - + diff --git a/bundles-maritalk.html b/bundles-maritalk.html index 5698c661b6..1736f60e02 100644 --- a/bundles-maritalk.html +++ b/bundles-maritalk.html @@ -25,7 +25,7 @@ - + diff --git a/bundles-mem0.html b/bundles-mem0.html index f4f435305d..a412991c6e 100644 --- a/bundles-mem0.html +++ b/bundles-mem0.html @@ -25,7 +25,7 @@ - + diff --git a/bundles-milvus.html b/bundles-milvus.html index cf67cd159e..77c46e5da8 100644 --- a/bundles-milvus.html +++ b/bundles-milvus.html @@ -25,7 +25,7 @@ - + diff --git a/bundles-mistralai.html b/bundles-mistralai.html index 1264286fd4..c7e933356c 100644 --- a/bundles-mistralai.html +++ b/bundles-mistralai.html @@ -25,7 +25,7 @@ - + diff --git a/bundles-mongodb.html b/bundles-mongodb.html index 63b68c433b..00c888c2c5 100644 --- a/bundles-mongodb.html +++ b/bundles-mongodb.html @@ -25,7 +25,7 @@ - + diff --git a/bundles-notion.html b/bundles-notion.html index d7689ca258..a908e4e895 100644 --- a/bundles-notion.html +++ b/bundles-notion.html @@ -25,7 +25,7 @@ - + diff --git a/bundles-novita.html b/bundles-novita.html index ee966cc63b..e7e8d106a1 100644 --- a/bundles-novita.html +++ b/bundles-novita.html @@ -25,7 +25,7 @@ - + diff --git a/bundles-nvidia.html b/bundles-nvidia.html index 64319bc78a..d1ea4f1056 100644 --- a/bundles-nvidia.html +++ b/bundles-nvidia.html @@ -25,7 +25,7 @@ - + diff --git a/bundles-ollama.html b/bundles-ollama.html index 90ed718d73..9910874add 100644 --- a/bundles-ollama.html +++ b/bundles-ollama.html @@ -25,7 +25,7 @@ - + diff --git a/bundles-openai.html b/bundles-openai.html index 963f5bae49..8763b6cd50 100644 --- a/bundles-openai.html +++ b/bundles-openai.html @@ -25,7 +25,7 @@ - + diff --git a/bundles-openrouter.html b/bundles-openrouter.html index 5baddc455c..3096321153 100644 --- a/bundles-openrouter.html +++ b/bundles-openrouter.html @@ -25,7 +25,7 @@ - + diff --git a/bundles-perplexity.html b/bundles-perplexity.html index e2c59736e8..85d9d27573 100644 --- a/bundles-perplexity.html +++ b/bundles-perplexity.html @@ -25,7 +25,7 @@ - + diff --git a/bundles-pgvector.html b/bundles-pgvector.html index 1fcd2a440f..cd2d3f677b 100644 --- a/bundles-pgvector.html +++ b/bundles-pgvector.html @@ -25,7 +25,7 @@ - + diff --git a/bundles-pinecone.html b/bundles-pinecone.html index f372491fbb..a3a4f9c26b 100644 --- a/bundles-pinecone.html +++ b/bundles-pinecone.html @@ -25,7 +25,7 @@ - + diff --git a/bundles-qdrant.html b/bundles-qdrant.html index 6673cb9e3a..f8c01a7cf3 100644 --- a/bundles-qdrant.html +++ b/bundles-qdrant.html @@ -25,7 +25,7 @@ - + diff --git a/bundles-redis.html b/bundles-redis.html index c583744ffe..4df3975c7e 100644 --- a/bundles-redis.html +++ b/bundles-redis.html @@ -25,7 +25,7 @@ - + diff --git a/bundles-sambanova.html b/bundles-sambanova.html index 96679a1e50..d16009b514 100644 --- a/bundles-sambanova.html +++ b/bundles-sambanova.html @@ -25,7 +25,7 @@ - + diff --git a/bundles-searchapi.html b/bundles-searchapi.html index b2b59b57ae..1109fed61c 100644 --- a/bundles-searchapi.html +++ b/bundles-searchapi.html @@ -25,7 +25,7 @@ - + diff --git a/bundles-serper.html b/bundles-serper.html index 50f1b290d1..b8fc9a7681 100644 --- a/bundles-serper.html +++ b/bundles-serper.html @@ -25,7 +25,7 @@ - + diff --git a/bundles-supabase.html b/bundles-supabase.html index 0e37680f29..940b793cf8 100644 --- a/bundles-supabase.html +++ b/bundles-supabase.html @@ -25,7 +25,7 @@ - + diff --git a/bundles-upstash.html b/bundles-upstash.html index c43e9d0283..0161583018 100644 --- a/bundles-upstash.html +++ b/bundles-upstash.html @@ -25,7 +25,7 @@ - + diff --git a/bundles-vectara.html b/bundles-vectara.html index 2fdf8c3ee1..8614b68398 100644 --- a/bundles-vectara.html +++ b/bundles-vectara.html @@ -25,7 +25,7 @@ - + diff --git a/bundles-vertexai.html b/bundles-vertexai.html index eada4950bb..041d373794 100644 --- a/bundles-vertexai.html +++ b/bundles-vertexai.html @@ -25,7 +25,7 @@ - + diff --git a/bundles-vllm.html b/bundles-vllm.html index 02d63730e0..33b23a43eb 100644 --- a/bundles-vllm.html +++ b/bundles-vllm.html @@ -25,7 +25,7 @@ - + diff --git a/bundles-weaviate.html b/bundles-weaviate.html index e9ab2ee8a0..bc241dd585 100644 --- a/bundles-weaviate.html +++ b/bundles-weaviate.html @@ -25,7 +25,7 @@ - + diff --git a/bundles-wikipedia.html b/bundles-wikipedia.html index 0c56d1b724..96dd73e937 100644 --- a/bundles-wikipedia.html +++ b/bundles-wikipedia.html @@ -25,7 +25,7 @@ - + diff --git a/bundles-xai.html b/bundles-xai.html index 9acc575b23..c90e8937f5 100644 --- a/bundles-xai.html +++ b/bundles-xai.html @@ -25,7 +25,7 @@ - + diff --git a/calculator.html b/calculator.html index 35217fea34..3813ef498b 100644 --- a/calculator.html +++ b/calculator.html @@ -25,7 +25,7 @@ - + diff --git a/chat-input-and-output.html b/chat-input-and-output.html index dc014a3f39..55061cc49b 100644 --- a/chat-input-and-output.html +++ b/chat-input-and-output.html @@ -25,7 +25,7 @@ - + diff --git a/chat-with-files.html b/chat-with-files.html index f98cbca5c1..12c54449d0 100644 --- a/chat-with-files.html +++ b/chat-with-files.html @@ -25,7 +25,7 @@ - + @@ -97,7 +97,7 @@ To connect ports, click and drag from one port to the other.

The result includes the outcome of the flow run and the LLM's response.

This example uses a local Langflow instance, and it asks the LLM to evaluate a sample resume. If you don't have a resume on hand, you can download fake-resume.txt.

-
tip

For help with constructing file upload requests in Python, JavaScript, and curl, see the Langflow File Upload Utility.

+
tip

For an example of constructing file upload requests in JavaScript, see the Create a vector RAG chatbot tutorial.

  1. To construct the request, gather the following information:

    diff --git a/chat-with-rag.html b/chat-with-rag.html index 1a4106c5c3..66c7b34097 100644 --- a/chat-with-rag.html +++ b/chat-with-rag.html @@ -25,7 +25,7 @@ - + @@ -90,8 +90,7 @@ Continue the tutorial to learn how to use the loading flow to load data into you
  2. Select the local file you want to upload, and then click Open. The file is loaded to your Langflow server.
  3. To load the data into your vector database, click the vector store component, and then click Run component to run the selected component and all prior dependent components.
  4. -
+

When the flow runs, the flow ingests the selected file, chunks the data, loads the data into the vector store database, and then generates embeddings for the chunks, which are also stored in the vector store.

Your database now contains data with vector embeddings that an LLM can use as context to respond to queries, as demonstrated in the next section of the tutorial.

Chat with your flow from a JavaScript application​

diff --git a/component-webhook.html b/component-webhook.html index 3a2930f27e..7ee2b97d3d 100644 --- a/component-webhook.html +++ b/component-webhook.html @@ -25,7 +25,7 @@ - + diff --git a/components-agents.html b/components-agents.html index f9594168d2..2832e982c3 100644 --- a/components-agents.html +++ b/components-agents.html @@ -25,7 +25,7 @@ - + diff --git a/components-bundle-components.html b/components-bundle-components.html index 69ba92520e..51928fd4f5 100644 --- a/components-bundle-components.html +++ b/components-bundle-components.html @@ -25,7 +25,7 @@ - + diff --git a/components-custom-components.html b/components-custom-components.html index 2eb40ce4fe..4bde91b8aa 100644 --- a/components-custom-components.html +++ b/components-custom-components.html @@ -25,7 +25,7 @@ - + diff --git a/components-embedding-models.html b/components-embedding-models.html index 30ffc0d7af..e276aa72b8 100644 --- a/components-embedding-models.html +++ b/components-embedding-models.html @@ -25,7 +25,7 @@ - + diff --git a/components-models.html b/components-models.html index 40a962c244..2712c31dc4 100644 --- a/components-models.html +++ b/components-models.html @@ -25,7 +25,7 @@ - + diff --git a/components-prompts.html b/components-prompts.html index aec9183f2a..109e033e86 100644 --- a/components-prompts.html +++ b/components-prompts.html @@ -25,7 +25,7 @@ - + diff --git a/concepts-components.html b/concepts-components.html index 05a826f14c..637263317f 100644 --- a/concepts-components.html +++ b/concepts-components.html @@ -25,7 +25,7 @@ - + diff --git a/concepts-file-management.html b/concepts-file-management.html index 1087b14d86..117f179826 100644 --- a/concepts-file-management.html +++ b/concepts-file-management.html @@ -25,7 +25,7 @@ - + diff --git a/concepts-flows-import.html b/concepts-flows-import.html index 8ec963cdf3..d41dd3a78d 100644 --- a/concepts-flows-import.html +++ b/concepts-flows-import.html @@ -25,7 +25,7 @@ - + diff --git a/concepts-flows.html b/concepts-flows.html index 995c7c6a5b..c6490253e7 100644 --- a/concepts-flows.html +++ b/concepts-flows.html @@ -25,7 +25,7 @@ - + diff --git a/concepts-overview.html b/concepts-overview.html index 39953af034..7365c36f39 100644 --- a/concepts-overview.html +++ b/concepts-overview.html @@ -25,7 +25,7 @@ - + diff --git a/concepts-playground.html b/concepts-playground.html index 46971955a1..a2494a35de 100644 --- a/concepts-playground.html +++ b/concepts-playground.html @@ -25,7 +25,7 @@ - + diff --git a/concepts-publish.html b/concepts-publish.html index a5f88e803b..d63dfb8a64 100644 --- a/concepts-publish.html +++ b/concepts-publish.html @@ -25,7 +25,7 @@ - + diff --git a/concepts-voice-mode.html b/concepts-voice-mode.html index 2a78c07c0f..97022420f1 100644 --- a/concepts-voice-mode.html +++ b/concepts-voice-mode.html @@ -25,7 +25,7 @@ - + diff --git a/configuration-cli.html b/configuration-cli.html index 05a1c38598..f6c3c38c9d 100644 --- a/configuration-cli.html +++ b/configuration-cli.html @@ -25,7 +25,7 @@ - + diff --git a/configuration-custom-database.html b/configuration-custom-database.html index f8372348a3..f074acd3bb 100644 --- a/configuration-custom-database.html +++ b/configuration-custom-database.html @@ -25,7 +25,7 @@ - + diff --git a/configuration-global-variables.html b/configuration-global-variables.html index c13380dcb6..48395ba1f4 100644 --- a/configuration-global-variables.html +++ b/configuration-global-variables.html @@ -25,7 +25,7 @@ - + diff --git a/contributing-bundles.html b/contributing-bundles.html index 7875ef43ef..d742c58bb3 100644 --- a/contributing-bundles.html +++ b/contributing-bundles.html @@ -25,7 +25,7 @@ - + diff --git a/contributing-community.html b/contributing-community.html index 75b8bca2aa..a7f9cb145e 100644 --- a/contributing-community.html +++ b/contributing-community.html @@ -25,7 +25,7 @@ - + diff --git a/contributing-component-tests.html b/contributing-component-tests.html index fe39ac9ded..793a33cbec 100644 --- a/contributing-component-tests.html +++ b/contributing-component-tests.html @@ -25,7 +25,7 @@ - + diff --git a/contributing-components.html b/contributing-components.html index 2dce439e41..18f90d0cae 100644 --- a/contributing-components.html +++ b/contributing-components.html @@ -25,7 +25,7 @@ - + diff --git a/contributing-github-issues.html b/contributing-github-issues.html index d86623422b..2572280a5b 100644 --- a/contributing-github-issues.html +++ b/contributing-github-issues.html @@ -25,7 +25,7 @@ - + diff --git a/contributing-how-to-contribute.html b/contributing-how-to-contribute.html index 86ad9924d8..a5dbe71347 100644 --- a/contributing-how-to-contribute.html +++ b/contributing-how-to-contribute.html @@ -25,7 +25,7 @@ - + diff --git a/contributing-telemetry.html b/contributing-telemetry.html index f1c2d13ac9..dd48de40fe 100644 --- a/contributing-telemetry.html +++ b/contributing-telemetry.html @@ -25,7 +25,7 @@ - + diff --git a/contributing-templates.html b/contributing-templates.html index 18c9a0ff49..1d7c468d0e 100644 --- a/contributing-templates.html +++ b/contributing-templates.html @@ -25,7 +25,7 @@ - + diff --git a/current-date.html b/current-date.html index f9f7911fbe..5b53200321 100644 --- a/current-date.html +++ b/current-date.html @@ -25,7 +25,7 @@ - + diff --git a/data-operations.html b/data-operations.html index 9a748029fc..655dc548a1 100644 --- a/data-operations.html +++ b/data-operations.html @@ -25,7 +25,7 @@ - + diff --git a/data-types.html b/data-types.html index dd9ce597cf..8697f474b3 100644 --- a/data-types.html +++ b/data-types.html @@ -25,7 +25,7 @@ - + diff --git a/dataframe-operations.html b/dataframe-operations.html index 0e7fd9824d..ecaa92a436 100644 --- a/dataframe-operations.html +++ b/dataframe-operations.html @@ -25,7 +25,7 @@ - + diff --git a/deployment-architecture.html b/deployment-architecture.html index 01385075d9..465d8f1097 100644 --- a/deployment-architecture.html +++ b/deployment-architecture.html @@ -25,7 +25,7 @@ - + diff --git a/deployment-caddyfile.html b/deployment-caddyfile.html index 71273eb9dc..f190f8b003 100644 --- a/deployment-caddyfile.html +++ b/deployment-caddyfile.html @@ -25,7 +25,7 @@ - + diff --git a/deployment-docker.html b/deployment-docker.html index 347afc5097..576fe7ad81 100644 --- a/deployment-docker.html +++ b/deployment-docker.html @@ -25,7 +25,7 @@ - + diff --git a/deployment-gcp.html b/deployment-gcp.html index ac93002229..07c82c5f73 100644 --- a/deployment-gcp.html +++ b/deployment-gcp.html @@ -25,7 +25,7 @@ - + diff --git a/deployment-hugging-face-spaces.html b/deployment-hugging-face-spaces.html index fb334a2115..81343f972c 100644 --- a/deployment-hugging-face-spaces.html +++ b/deployment-hugging-face-spaces.html @@ -25,7 +25,7 @@ - + diff --git a/deployment-kubernetes-dev.html b/deployment-kubernetes-dev.html index 9f5f0d881d..dc7ac18ad9 100644 --- a/deployment-kubernetes-dev.html +++ b/deployment-kubernetes-dev.html @@ -25,7 +25,7 @@ - + diff --git a/deployment-kubernetes-prod.html b/deployment-kubernetes-prod.html index 0da59b268a..621f8c5408 100644 --- a/deployment-kubernetes-prod.html +++ b/deployment-kubernetes-prod.html @@ -25,7 +25,7 @@ - + diff --git a/deployment-nginx-ssl.html b/deployment-nginx-ssl.html index 4464e79311..085de78593 100644 --- a/deployment-nginx-ssl.html +++ b/deployment-nginx-ssl.html @@ -25,7 +25,7 @@ - + diff --git a/deployment-overview.html b/deployment-overview.html index fda685c288..ad15acbee2 100644 --- a/deployment-overview.html +++ b/deployment-overview.html @@ -25,7 +25,7 @@ - + diff --git a/deployment-prod-best-practices.html b/deployment-prod-best-practices.html index 94609f438f..1a340df5e8 100644 --- a/deployment-prod-best-practices.html +++ b/deployment-prod-best-practices.html @@ -25,7 +25,7 @@ - + diff --git a/deployment-public-server.html b/deployment-public-server.html index 1ebcd40e5a..ef7233b567 100644 --- a/deployment-public-server.html +++ b/deployment-public-server.html @@ -25,7 +25,7 @@ - + diff --git a/deployment-railway.html b/deployment-railway.html index 7d7fb2b5e5..a4abcf22db 100644 --- a/deployment-railway.html +++ b/deployment-railway.html @@ -25,7 +25,7 @@ - + diff --git a/deployment-render.html b/deployment-render.html index d5a64f4f84..ee29462dc7 100644 --- a/deployment-render.html +++ b/deployment-render.html @@ -25,7 +25,7 @@ - + diff --git a/develop-application.html b/develop-application.html index 13a5f851af..cad5d06af3 100644 --- a/develop-application.html +++ b/develop-application.html @@ -25,7 +25,7 @@ - + diff --git a/directory.html b/directory.html index b3b1e22501..3d227ec626 100644 --- a/directory.html +++ b/directory.html @@ -25,7 +25,7 @@ - + diff --git a/dynamic-create-data.html b/dynamic-create-data.html index 465dbbf4fc..88b5b53685 100644 --- a/dynamic-create-data.html +++ b/dynamic-create-data.html @@ -25,7 +25,7 @@ - + diff --git a/enterprise-database-guide.html b/enterprise-database-guide.html index b85a13a510..c20db0639e 100644 --- a/enterprise-database-guide.html +++ b/enterprise-database-guide.html @@ -25,7 +25,7 @@ - + diff --git a/environment-variables.html b/environment-variables.html index 9d850eac35..b24e2eff55 100644 --- a/environment-variables.html +++ b/environment-variables.html @@ -25,7 +25,7 @@ - + diff --git a/get-started-installation.html b/get-started-installation.html index 8c663aa177..2503dd54d7 100644 --- a/get-started-installation.html +++ b/get-started-installation.html @@ -25,7 +25,7 @@ - + diff --git a/get-started-quickstart.html b/get-started-quickstart.html index 5de758d137..ea50d965c7 100644 --- a/get-started-quickstart.html +++ b/get-started-quickstart.html @@ -25,7 +25,7 @@ - + diff --git a/guardrails.html b/guardrails.html index 649d5b21f3..00415b701f 100644 --- a/guardrails.html +++ b/guardrails.html @@ -25,7 +25,7 @@ - + diff --git a/if-else.html b/if-else.html index 5a8eeca2d3..65b2196dd0 100644 --- a/if-else.html +++ b/if-else.html @@ -25,7 +25,7 @@ - + diff --git a/index.html b/index.html index 1c84de0366..f2eaf07792 100644 --- a/index.html +++ b/index.html @@ -25,7 +25,7 @@ - + diff --git a/install-custom-dependencies.html b/install-custom-dependencies.html index b57f4c8b00..c35fccf434 100644 --- a/install-custom-dependencies.html +++ b/install-custom-dependencies.html @@ -25,7 +25,7 @@ - + diff --git a/integrations-arize.html b/integrations-arize.html index 3e93625efe..011bcb7593 100644 --- a/integrations-arize.html +++ b/integrations-arize.html @@ -25,7 +25,7 @@ - + diff --git a/integrations-instana-traceloop.html b/integrations-instana-traceloop.html index 26c5b9e143..d7d6aba7ec 100644 --- a/integrations-instana-traceloop.html +++ b/integrations-instana-traceloop.html @@ -25,7 +25,7 @@ - + diff --git a/integrations-langfuse.html b/integrations-langfuse.html index 455c899cff..91a89ff4be 100644 --- a/integrations-langfuse.html +++ b/integrations-langfuse.html @@ -25,7 +25,7 @@ - + diff --git a/integrations-langsmith.html b/integrations-langsmith.html index def8fe3f7e..417dee93c7 100644 --- a/integrations-langsmith.html +++ b/integrations-langsmith.html @@ -25,7 +25,7 @@ - + diff --git a/integrations-langwatch.html b/integrations-langwatch.html index 86bb4c0921..8fd3dc7e1f 100644 --- a/integrations-langwatch.html +++ b/integrations-langwatch.html @@ -25,7 +25,7 @@ - + diff --git a/integrations-openlayer.html b/integrations-openlayer.html index 4c3c870f17..4420866ec0 100644 --- a/integrations-openlayer.html +++ b/integrations-openlayer.html @@ -25,7 +25,7 @@ - + diff --git a/integrations-opik.html b/integrations-opik.html index a64625fd90..07ee86e8e7 100644 --- a/integrations-opik.html +++ b/integrations-opik.html @@ -25,7 +25,7 @@ - + diff --git a/jwt-authentication.html b/jwt-authentication.html index da4d52f0c9..e590fde2bf 100644 --- a/jwt-authentication.html +++ b/jwt-authentication.html @@ -25,7 +25,7 @@ - + diff --git a/knowledge-base.html b/knowledge-base.html index b8b29b437f..9fbe8f49bc 100644 --- a/knowledge-base.html +++ b/knowledge-base.html @@ -25,7 +25,7 @@ - + diff --git a/knowledge.html b/knowledge.html index 8a5a73ff0b..9445225b98 100644 --- a/knowledge.html +++ b/knowledge.html @@ -25,7 +25,7 @@ - + diff --git a/legacy-core-components.html b/legacy-core-components.html index dd09f95b46..ba07a9ab14 100644 --- a/legacy-core-components.html +++ b/legacy-core-components.html @@ -25,7 +25,7 @@ - + diff --git a/llm-selector.html b/llm-selector.html index 720cade5be..db0f3387e7 100644 --- a/llm-selector.html +++ b/llm-selector.html @@ -25,7 +25,7 @@ - + diff --git a/logging.html b/logging.html index ca6d054a36..ebbb4bce47 100644 --- a/logging.html +++ b/logging.html @@ -25,7 +25,7 @@ - + diff --git a/loop.html b/loop.html index 019b74fd96..7d3eeec98a 100644 --- a/loop.html +++ b/loop.html @@ -25,7 +25,7 @@ - + diff --git a/luna-for-langflow.html b/luna-for-langflow.html index ed05fd3ea2..e702118bbb 100644 --- a/luna-for-langflow.html +++ b/luna-for-langflow.html @@ -25,7 +25,7 @@ - + diff --git a/mcp-client.html b/mcp-client.html index 09ef82e3f0..d6cf2be09e 100644 --- a/mcp-client.html +++ b/mcp-client.html @@ -25,7 +25,7 @@ - + diff --git a/mcp-component-astra.html b/mcp-component-astra.html index b93b7778aa..09bf93e3f1 100644 --- a/mcp-component-astra.html +++ b/mcp-component-astra.html @@ -25,7 +25,7 @@ - + diff --git a/mcp-server.html b/mcp-server.html index d89e48e0b9..967983544c 100644 --- a/mcp-server.html +++ b/mcp-server.html @@ -25,7 +25,7 @@ - + diff --git a/mcp-tools.html b/mcp-tools.html index 0df4ab8fa5..fa80ad67c6 100644 --- a/mcp-tools.html +++ b/mcp-tools.html @@ -25,7 +25,7 @@ - + diff --git a/mcp-tutorial.html b/mcp-tutorial.html index 91b8d8d963..f846029b56 100644 --- a/mcp-tutorial.html +++ b/mcp-tutorial.html @@ -25,7 +25,7 @@ - + diff --git a/memory.html b/memory.html index b0603fd615..7befbf684c 100644 --- a/memory.html +++ b/memory.html @@ -25,7 +25,7 @@ - + diff --git a/message-history.html b/message-history.html index 37b47681eb..a80ee7b83a 100644 --- a/message-history.html +++ b/message-history.html @@ -25,7 +25,7 @@ - + diff --git a/mock-data.html b/mock-data.html index eb970804ec..1283238620 100644 --- a/mock-data.html +++ b/mock-data.html @@ -25,7 +25,7 @@ - + diff --git a/notify-and-listen.html b/notify-and-listen.html index f47c949537..c876833dc7 100644 --- a/notify-and-listen.html +++ b/notify-and-listen.html @@ -25,7 +25,7 @@ - + diff --git a/parser.html b/parser.html index 6f193b1946..fd68313a0c 100644 --- a/parser.html +++ b/parser.html @@ -25,7 +25,7 @@ - + diff --git a/python-interpreter.html b/python-interpreter.html index b528689afb..fb91c891fa 100644 --- a/python-interpreter.html +++ b/python-interpreter.html @@ -25,7 +25,7 @@ - + diff --git a/read-file.html b/read-file.html index d01a00ffe3..5f25b75079 100644 --- a/read-file.html +++ b/read-file.html @@ -25,7 +25,7 @@ - + diff --git a/release-notes.html b/release-notes.html index 0cf3af0349..e04b22969e 100644 --- a/release-notes.html +++ b/release-notes.html @@ -25,7 +25,7 @@ - + diff --git a/run-flow.html b/run-flow.html index db8828a99a..1a0ee189c2 100644 --- a/run-flow.html +++ b/run-flow.html @@ -25,7 +25,7 @@ - + diff --git a/search.html b/search.html index 92d5a04baa..c1e97a2a6d 100644 --- a/search.html +++ b/search.html @@ -25,7 +25,7 @@ - + diff --git a/security.html b/security.html index 7d7fc73b98..170c6572d3 100644 --- a/security.html +++ b/security.html @@ -25,7 +25,7 @@ - + diff --git a/session-id.html b/session-id.html index d76217130b..166802f2bf 100644 --- a/session-id.html +++ b/session-id.html @@ -25,7 +25,7 @@ - + diff --git a/sitemap.xml b/sitemap.xml index 04b746f0fd..b6fa67d0e0 100644 --- a/sitemap.xml +++ b/sitemap.xml @@ -1 +1 @@ -https://docs.langflow.org/apihttps://docs.langflow.org/api/openapi.jsonhttps://docs.langflow.org/api/workflowhttps://docs.langflow.org/searchhttps://docs.langflow.org/agent-tutorial2026-03-13T13:44:58.000Zhttps://docs.langflow.org/agents2026-03-13T13:44:58.000Zhttps://docs.langflow.org/agents-tools2026-03-13T13:44:58.000Zhttps://docs.langflow.org/api-build2026-03-13T13:44:58.000Zhttps://docs.langflow.org/api-files2026-03-13T13:44:58.000Zhttps://docs.langflow.org/api-flows2026-03-13T13:44:58.000Zhttps://docs.langflow.org/api-flows-run2026-03-13T13:44:58.000Zhttps://docs.langflow.org/api-keys-and-authentication2026-03-13T13:44:58.000Zhttps://docs.langflow.org/api-logs2026-03-13T13:44:58.000Zhttps://docs.langflow.org/api-monitor2026-03-13T13:44:58.000Zhttps://docs.langflow.org/api-openai-responses2026-03-13T13:44:58.000Zhttps://docs.langflow.org/api-projects2026-03-13T13:44:58.000Zhttps://docs.langflow.org/api-reference-api-examples2026-03-13T13:44:58.000Zhttps://docs.langflow.org/api-request2026-03-13T13:44:58.000Zhttps://docs.langflow.org/api-users2026-03-13T13:44:58.000Zhttps://docs.langflow.org/batch-run2026-03-13T13:44:58.000Zhttps://docs.langflow.org/bundles-agentics2026-03-13T13:44:58.000Zhttps://docs.langflow.org/bundles-aiml2026-03-13T13:44:58.000Zhttps://docs.langflow.org/bundles-altk2026-03-13T13:44:58.000Zhttps://docs.langflow.org/bundles-amazon2026-03-13T13:44:58.000Zhttps://docs.langflow.org/bundles-anthropic2026-03-13T13:44:58.000Zhttps://docs.langflow.org/bundles-apify2026-03-13T13:44:58.000Zhttps://docs.langflow.org/bundles-arxiv2026-03-13T13:44:58.000Zhttps://docs.langflow.org/bundles-assemblyai2026-03-13T13:44:58.000Zhttps://docs.langflow.org/bundles-azure2026-03-13T13:44:58.000Zhttps://docs.langflow.org/bundles-baidu2026-03-13T13:44:58.000Zhttps://docs.langflow.org/bundles-bing2026-03-13T13:44:58.000Zhttps://docs.langflow.org/bundles-cassandra2026-03-13T13:44:58.000Zhttps://docs.langflow.org/bundles-chroma2026-03-13T13:44:58.000Zhttps://docs.langflow.org/bundles-cleanlab2026-03-13T13:44:58.000Zhttps://docs.langflow.org/bundles-clickhouse2026-03-13T13:44:58.000Zhttps://docs.langflow.org/bundles-cloudflare2026-03-13T13:44:58.000Zhttps://docs.langflow.org/bundles-cohere2026-03-13T13:44:58.000Zhttps://docs.langflow.org/bundles-cometapi2026-03-13T13:44:58.000Zhttps://docs.langflow.org/bundles-composio2026-03-13T13:44:58.000Zhttps://docs.langflow.org/bundles-couchbase2026-03-13T13:44:58.000Zhttps://docs.langflow.org/bundles-cuga2026-03-13T13:44:58.000Zhttps://docs.langflow.org/bundles-datastax2026-03-13T13:44:58.000Zhttps://docs.langflow.org/bundles-deepseek2026-03-13T13:44:58.000Zhttps://docs.langflow.org/bundles-docling2026-03-13T13:44:58.000Zhttps://docs.langflow.org/bundles-duckduckgo2026-03-13T13:44:58.000Zhttps://docs.langflow.org/bundles-elastic2026-03-13T13:44:58.000Zhttps://docs.langflow.org/bundles-exa2026-03-13T13:44:58.000Zhttps://docs.langflow.org/bundles-faiss2026-03-13T13:44:58.000Zhttps://docs.langflow.org/bundles-glean2026-03-13T13:44:58.000Zhttps://docs.langflow.org/bundles-google2026-03-13T13:44:58.000Zhttps://docs.langflow.org/bundles-groq2026-03-13T13:44:58.000Zhttps://docs.langflow.org/bundles-huggingface2026-03-13T13:44:58.000Zhttps://docs.langflow.org/bundles-ibm2026-03-13T13:44:58.000Zhttps://docs.langflow.org/bundles-icosacomputing2026-03-13T13:44:58.000Zhttps://docs.langflow.org/bundles-langchain2026-03-13T13:44:58.000Zhttps://docs.langflow.org/bundles-lite-llm2026-03-13T13:44:58.000Zhttps://docs.langflow.org/bundles-lmstudio2026-03-13T13:44:58.000Zhttps://docs.langflow.org/bundles-maritalk2026-03-13T13:44:58.000Zhttps://docs.langflow.org/bundles-mem02026-03-13T13:44:58.000Zhttps://docs.langflow.org/bundles-milvus2026-03-13T13:44:58.000Zhttps://docs.langflow.org/bundles-mistralai2026-03-13T13:44:58.000Zhttps://docs.langflow.org/bundles-mongodb2026-03-13T13:44:58.000Zhttps://docs.langflow.org/bundles-notion2026-03-13T13:44:58.000Zhttps://docs.langflow.org/bundles-novita2026-03-13T13:44:58.000Zhttps://docs.langflow.org/bundles-nvidia2026-03-13T13:44:58.000Zhttps://docs.langflow.org/bundles-ollama2026-03-13T13:44:58.000Zhttps://docs.langflow.org/bundles-openai2026-03-13T13:44:58.000Zhttps://docs.langflow.org/bundles-openrouter2026-03-13T13:44:58.000Zhttps://docs.langflow.org/bundles-perplexity2026-03-13T13:44:58.000Zhttps://docs.langflow.org/bundles-pgvector2026-03-13T13:44:58.000Zhttps://docs.langflow.org/bundles-pinecone2026-03-13T13:44:58.000Zhttps://docs.langflow.org/bundles-qdrant2026-03-13T13:44:58.000Zhttps://docs.langflow.org/bundles-redis2026-03-13T13:44:58.000Zhttps://docs.langflow.org/bundles-sambanova2026-03-13T13:44:58.000Zhttps://docs.langflow.org/bundles-searchapi2026-03-13T13:44:58.000Zhttps://docs.langflow.org/bundles-serper2026-03-13T13:44:58.000Zhttps://docs.langflow.org/bundles-supabase2026-03-13T13:44:58.000Zhttps://docs.langflow.org/bundles-upstash2026-03-13T13:44:58.000Zhttps://docs.langflow.org/bundles-vectara2026-03-13T13:44:58.000Zhttps://docs.langflow.org/bundles-vertexai2026-03-13T13:44:58.000Zhttps://docs.langflow.org/bundles-vllm2026-03-13T13:44:58.000Zhttps://docs.langflow.org/bundles-weaviate2026-03-13T13:44:58.000Zhttps://docs.langflow.org/bundles-wikipedia2026-03-13T13:44:58.000Zhttps://docs.langflow.org/bundles-xai2026-03-13T13:44:58.000Zhttps://docs.langflow.org/calculator2026-03-13T13:44:58.000Zhttps://docs.langflow.org/chat-input-and-output2026-03-13T13:44:58.000Zhttps://docs.langflow.org/chat-with-files2026-03-13T13:44:58.000Zhttps://docs.langflow.org/chat-with-rag2026-03-13T13:44:58.000Zhttps://docs.langflow.org/component-webhook2026-03-13T13:44:58.000Zhttps://docs.langflow.org/components-agents2026-03-13T13:44:58.000Zhttps://docs.langflow.org/components-bundle-components2026-03-13T13:44:58.000Zhttps://docs.langflow.org/components-custom-components2026-03-13T13:44:58.000Zhttps://docs.langflow.org/components-embedding-models2026-03-13T13:44:58.000Zhttps://docs.langflow.org/components-models2026-03-13T13:44:58.000Zhttps://docs.langflow.org/components-prompts2026-03-13T13:44:58.000Zhttps://docs.langflow.org/concepts-components2026-03-13T13:44:58.000Zhttps://docs.langflow.org/concepts-file-management2026-03-13T13:44:58.000Zhttps://docs.langflow.org/concepts-flows2026-03-13T13:44:58.000Zhttps://docs.langflow.org/concepts-flows-import2026-03-13T13:44:58.000Zhttps://docs.langflow.org/concepts-overview2026-03-13T13:44:58.000Zhttps://docs.langflow.org/concepts-playground2026-03-13T13:44:58.000Zhttps://docs.langflow.org/concepts-publish2026-03-13T13:44:58.000Zhttps://docs.langflow.org/concepts-voice-mode2026-03-13T13:44:58.000Zhttps://docs.langflow.org/configuration-cli2026-03-13T13:44:58.000Zhttps://docs.langflow.org/configuration-custom-database2026-03-13T13:44:58.000Zhttps://docs.langflow.org/configuration-global-variables2026-03-13T13:44:58.000Zhttps://docs.langflow.org/contributing-bundles2026-03-13T13:44:58.000Zhttps://docs.langflow.org/contributing-community2026-03-13T13:44:58.000Zhttps://docs.langflow.org/contributing-component-tests2026-03-13T13:44:58.000Zhttps://docs.langflow.org/contributing-components2026-03-13T13:44:58.000Zhttps://docs.langflow.org/contributing-github-issues2026-03-13T13:44:58.000Zhttps://docs.langflow.org/contributing-how-to-contribute2026-03-13T13:44:58.000Zhttps://docs.langflow.org/contributing-telemetry2026-03-13T13:44:58.000Zhttps://docs.langflow.org/contributing-templates2026-03-13T13:44:58.000Zhttps://docs.langflow.org/current-date2026-03-13T13:44:58.000Zhttps://docs.langflow.org/data-operations2026-03-13T13:44:58.000Zhttps://docs.langflow.org/data-types2026-03-13T13:44:58.000Zhttps://docs.langflow.org/dataframe-operations2026-03-13T13:44:58.000Zhttps://docs.langflow.org/deployment-architecture2026-03-13T13:44:58.000Zhttps://docs.langflow.org/deployment-caddyfile2026-03-13T13:44:58.000Zhttps://docs.langflow.org/deployment-docker2026-03-13T13:44:58.000Zhttps://docs.langflow.org/deployment-gcp2026-03-13T13:44:58.000Zhttps://docs.langflow.org/deployment-hugging-face-spaces2026-03-13T13:44:58.000Zhttps://docs.langflow.org/deployment-kubernetes-dev2026-03-13T13:44:58.000Zhttps://docs.langflow.org/deployment-kubernetes-prod2026-03-13T13:44:58.000Zhttps://docs.langflow.org/deployment-nginx-ssl2026-03-13T13:44:58.000Zhttps://docs.langflow.org/deployment-overview2026-03-13T13:44:58.000Zhttps://docs.langflow.org/deployment-prod-best-practices2026-03-13T13:44:58.000Zhttps://docs.langflow.org/deployment-public-server2026-03-13T13:44:58.000Zhttps://docs.langflow.org/deployment-railway2026-03-13T13:44:58.000Zhttps://docs.langflow.org/deployment-render2026-03-13T13:44:58.000Zhttps://docs.langflow.org/develop-application2026-03-13T13:44:58.000Zhttps://docs.langflow.org/directory2026-03-13T13:44:58.000Zhttps://docs.langflow.org/dynamic-create-data2026-03-13T13:44:58.000Zhttps://docs.langflow.org/enterprise-database-guide2026-03-13T13:44:58.000Zhttps://docs.langflow.org/environment-variables2026-03-13T13:44:58.000Zhttps://docs.langflow.org/get-started-installation2026-03-13T13:44:58.000Zhttps://docs.langflow.org/get-started-quickstart2026-03-13T13:44:58.000Zhttps://docs.langflow.org/guardrails2026-03-13T13:44:58.000Zhttps://docs.langflow.org/if-else2026-03-13T13:44:58.000Zhttps://docs.langflow.org/install-custom-dependencies2026-03-13T13:44:58.000Zhttps://docs.langflow.org/integrations-arize2026-03-13T13:44:58.000Zhttps://docs.langflow.org/integrations-instana-traceloop2026-03-13T13:44:58.000Zhttps://docs.langflow.org/integrations-langfuse2026-03-13T13:44:58.000Zhttps://docs.langflow.org/integrations-langsmith2026-03-13T13:44:58.000Zhttps://docs.langflow.org/integrations-langwatch2026-03-13T13:44:58.000Zhttps://docs.langflow.org/integrations-openlayer2026-03-13T13:44:58.000Zhttps://docs.langflow.org/integrations-opik2026-03-13T13:44:58.000Zhttps://docs.langflow.org/jwt-authentication2026-03-13T13:44:58.000Zhttps://docs.langflow.org/knowledge2026-03-13T13:44:58.000Zhttps://docs.langflow.org/knowledge-base2026-03-13T13:44:58.000Zhttps://docs.langflow.org/legacy-core-components2026-03-13T13:44:58.000Zhttps://docs.langflow.org/llm-selector2026-03-13T13:44:58.000Zhttps://docs.langflow.org/logging2026-03-13T13:44:58.000Zhttps://docs.langflow.org/loop2026-03-13T13:44:58.000Zhttps://docs.langflow.org/luna-for-langflow2026-03-13T13:44:58.000Zhttps://docs.langflow.org/mcp-client2026-03-13T13:44:58.000Zhttps://docs.langflow.org/mcp-component-astra2026-03-13T13:44:58.000Zhttps://docs.langflow.org/mcp-server2026-03-13T13:44:58.000Zhttps://docs.langflow.org/mcp-tools2026-03-13T13:44:58.000Zhttps://docs.langflow.org/mcp-tutorial2026-03-13T13:44:58.000Zhttps://docs.langflow.org/memory2026-03-13T13:44:58.000Zhttps://docs.langflow.org/message-history2026-03-13T13:44:58.000Zhttps://docs.langflow.org/mock-data2026-03-13T13:44:58.000Zhttps://docs.langflow.org/notify-and-listen2026-03-13T13:44:58.000Zhttps://docs.langflow.org/parser2026-03-13T13:44:58.000Zhttps://docs.langflow.org/python-interpreter2026-03-13T13:44:58.000Zhttps://docs.langflow.org/read-file2026-03-13T13:44:58.000Zhttps://docs.langflow.org/release-notes2026-03-13T13:44:58.000Zhttps://docs.langflow.org/run-flow2026-03-13T13:44:58.000Zhttps://docs.langflow.org/security2026-03-13T13:44:58.000Zhttps://docs.langflow.org/session-id2026-03-13T13:44:58.000Zhttps://docs.langflow.org/smart-router2026-03-13T13:44:58.000Zhttps://docs.langflow.org/smart-transform2026-03-13T13:44:58.000Zhttps://docs.langflow.org/split-text2026-03-13T13:44:58.000Zhttps://docs.langflow.org/sql-database2026-03-13T13:44:58.000Zhttps://docs.langflow.org/structured-output2026-03-13T13:44:58.000Zhttps://docs.langflow.org/text-input-and-output2026-03-13T13:44:58.000Zhttps://docs.langflow.org/traces2026-03-13T13:44:58.000Zhttps://docs.langflow.org/troubleshoot2026-03-13T13:44:58.000Zhttps://docs.langflow.org/type-convert2026-03-13T13:44:58.000Zhttps://docs.langflow.org/typescript-client2026-03-13T13:44:58.000Zhttps://docs.langflow.org/url2026-03-13T13:44:58.000Zhttps://docs.langflow.org/web-search2026-03-13T13:44:58.000Zhttps://docs.langflow.org/webhook2026-03-13T13:44:58.000Zhttps://docs.langflow.org/workflow-api2026-03-13T13:44:58.000Zhttps://docs.langflow.org/write-file2026-03-13T13:44:58.000Zhttps://docs.langflow.org/2026-03-13T13:44:58.000Z \ No newline at end of file +https://docs.langflow.org/apihttps://docs.langflow.org/api/openapi.jsonhttps://docs.langflow.org/api/workflowhttps://docs.langflow.org/searchhttps://docs.langflow.org/agent-tutorial2026-03-13T14:41:13.000Zhttps://docs.langflow.org/agents2026-03-13T14:41:13.000Zhttps://docs.langflow.org/agents-tools2026-03-13T14:41:13.000Zhttps://docs.langflow.org/api-build2026-03-13T14:41:13.000Zhttps://docs.langflow.org/api-files2026-03-13T14:41:13.000Zhttps://docs.langflow.org/api-flows2026-03-13T14:41:13.000Zhttps://docs.langflow.org/api-flows-run2026-03-13T14:41:13.000Zhttps://docs.langflow.org/api-keys-and-authentication2026-03-13T14:41:13.000Zhttps://docs.langflow.org/api-logs2026-03-13T14:41:13.000Zhttps://docs.langflow.org/api-monitor2026-03-13T14:41:13.000Zhttps://docs.langflow.org/api-openai-responses2026-03-13T14:41:13.000Zhttps://docs.langflow.org/api-projects2026-03-13T14:41:13.000Zhttps://docs.langflow.org/api-reference-api-examples2026-03-13T14:41:13.000Zhttps://docs.langflow.org/api-request2026-03-13T14:41:13.000Zhttps://docs.langflow.org/api-users2026-03-13T14:41:13.000Zhttps://docs.langflow.org/batch-run2026-03-13T14:41:13.000Zhttps://docs.langflow.org/bundles-agentics2026-03-13T14:41:13.000Zhttps://docs.langflow.org/bundles-aiml2026-03-13T14:41:13.000Zhttps://docs.langflow.org/bundles-altk2026-03-13T14:41:13.000Zhttps://docs.langflow.org/bundles-amazon2026-03-13T14:41:13.000Zhttps://docs.langflow.org/bundles-anthropic2026-03-13T14:41:13.000Zhttps://docs.langflow.org/bundles-apify2026-03-13T14:41:13.000Zhttps://docs.langflow.org/bundles-arxiv2026-03-13T14:41:13.000Zhttps://docs.langflow.org/bundles-assemblyai2026-03-13T14:41:13.000Zhttps://docs.langflow.org/bundles-azure2026-03-13T14:41:13.000Zhttps://docs.langflow.org/bundles-baidu2026-03-13T14:41:13.000Zhttps://docs.langflow.org/bundles-bing2026-03-13T14:41:13.000Zhttps://docs.langflow.org/bundles-cassandra2026-03-13T14:41:13.000Zhttps://docs.langflow.org/bundles-chroma2026-03-13T14:41:13.000Zhttps://docs.langflow.org/bundles-cleanlab2026-03-13T14:41:13.000Zhttps://docs.langflow.org/bundles-clickhouse2026-03-13T14:41:13.000Zhttps://docs.langflow.org/bundles-cloudflare2026-03-13T14:41:13.000Zhttps://docs.langflow.org/bundles-cohere2026-03-13T14:41:13.000Zhttps://docs.langflow.org/bundles-cometapi2026-03-13T14:41:13.000Zhttps://docs.langflow.org/bundles-composio2026-03-13T14:41:13.000Zhttps://docs.langflow.org/bundles-couchbase2026-03-13T14:41:13.000Zhttps://docs.langflow.org/bundles-cuga2026-03-13T14:41:13.000Zhttps://docs.langflow.org/bundles-datastax2026-03-13T14:41:13.000Zhttps://docs.langflow.org/bundles-deepseek2026-03-13T14:41:13.000Zhttps://docs.langflow.org/bundles-docling2026-03-13T14:41:13.000Zhttps://docs.langflow.org/bundles-duckduckgo2026-03-13T14:41:13.000Zhttps://docs.langflow.org/bundles-elastic2026-03-13T14:41:13.000Zhttps://docs.langflow.org/bundles-exa2026-03-13T14:41:13.000Zhttps://docs.langflow.org/bundles-faiss2026-03-13T14:41:13.000Zhttps://docs.langflow.org/bundles-glean2026-03-13T14:41:13.000Zhttps://docs.langflow.org/bundles-google2026-03-13T14:41:13.000Zhttps://docs.langflow.org/bundles-groq2026-03-13T14:41:13.000Zhttps://docs.langflow.org/bundles-huggingface2026-03-13T14:41:13.000Zhttps://docs.langflow.org/bundles-ibm2026-03-13T14:41:13.000Zhttps://docs.langflow.org/bundles-icosacomputing2026-03-13T14:41:13.000Zhttps://docs.langflow.org/bundles-langchain2026-03-13T14:41:13.000Zhttps://docs.langflow.org/bundles-lite-llm2026-03-13T14:41:13.000Zhttps://docs.langflow.org/bundles-lmstudio2026-03-13T14:41:13.000Zhttps://docs.langflow.org/bundles-maritalk2026-03-13T14:41:13.000Zhttps://docs.langflow.org/bundles-mem02026-03-13T14:41:13.000Zhttps://docs.langflow.org/bundles-milvus2026-03-13T14:41:13.000Zhttps://docs.langflow.org/bundles-mistralai2026-03-13T14:41:13.000Zhttps://docs.langflow.org/bundles-mongodb2026-03-13T14:41:13.000Zhttps://docs.langflow.org/bundles-notion2026-03-13T14:41:13.000Zhttps://docs.langflow.org/bundles-novita2026-03-13T14:41:13.000Zhttps://docs.langflow.org/bundles-nvidia2026-03-13T14:41:13.000Zhttps://docs.langflow.org/bundles-ollama2026-03-13T14:41:13.000Zhttps://docs.langflow.org/bundles-openai2026-03-13T14:41:13.000Zhttps://docs.langflow.org/bundles-openrouter2026-03-13T14:41:13.000Zhttps://docs.langflow.org/bundles-perplexity2026-03-13T14:41:13.000Zhttps://docs.langflow.org/bundles-pgvector2026-03-13T14:41:13.000Zhttps://docs.langflow.org/bundles-pinecone2026-03-13T14:41:13.000Zhttps://docs.langflow.org/bundles-qdrant2026-03-13T14:41:13.000Zhttps://docs.langflow.org/bundles-redis2026-03-13T14:41:13.000Zhttps://docs.langflow.org/bundles-sambanova2026-03-13T14:41:13.000Zhttps://docs.langflow.org/bundles-searchapi2026-03-13T14:41:13.000Zhttps://docs.langflow.org/bundles-serper2026-03-13T14:41:13.000Zhttps://docs.langflow.org/bundles-supabase2026-03-13T14:41:13.000Zhttps://docs.langflow.org/bundles-upstash2026-03-13T14:41:13.000Zhttps://docs.langflow.org/bundles-vectara2026-03-13T14:41:13.000Zhttps://docs.langflow.org/bundles-vertexai2026-03-13T14:41:13.000Zhttps://docs.langflow.org/bundles-vllm2026-03-13T14:41:13.000Zhttps://docs.langflow.org/bundles-weaviate2026-03-13T14:41:13.000Zhttps://docs.langflow.org/bundles-wikipedia2026-03-13T14:41:13.000Zhttps://docs.langflow.org/bundles-xai2026-03-13T14:41:13.000Zhttps://docs.langflow.org/calculator2026-03-13T14:41:13.000Zhttps://docs.langflow.org/chat-input-and-output2026-03-13T14:41:13.000Zhttps://docs.langflow.org/chat-with-files2026-03-13T14:41:13.000Zhttps://docs.langflow.org/chat-with-rag2026-03-13T14:41:13.000Zhttps://docs.langflow.org/component-webhook2026-03-13T14:41:13.000Zhttps://docs.langflow.org/components-agents2026-03-13T14:41:13.000Zhttps://docs.langflow.org/components-bundle-components2026-03-13T14:41:13.000Zhttps://docs.langflow.org/components-custom-components2026-03-13T14:41:13.000Zhttps://docs.langflow.org/components-embedding-models2026-03-13T14:41:13.000Zhttps://docs.langflow.org/components-models2026-03-13T14:41:13.000Zhttps://docs.langflow.org/components-prompts2026-03-13T14:41:13.000Zhttps://docs.langflow.org/concepts-components2026-03-13T14:41:13.000Zhttps://docs.langflow.org/concepts-file-management2026-03-13T14:41:13.000Zhttps://docs.langflow.org/concepts-flows2026-03-13T14:41:13.000Zhttps://docs.langflow.org/concepts-flows-import2026-03-13T14:41:13.000Zhttps://docs.langflow.org/concepts-overview2026-03-13T14:41:13.000Zhttps://docs.langflow.org/concepts-playground2026-03-13T14:41:13.000Zhttps://docs.langflow.org/concepts-publish2026-03-13T14:41:13.000Zhttps://docs.langflow.org/concepts-voice-mode2026-03-13T14:41:13.000Zhttps://docs.langflow.org/configuration-cli2026-03-13T14:41:13.000Zhttps://docs.langflow.org/configuration-custom-database2026-03-13T14:41:13.000Zhttps://docs.langflow.org/configuration-global-variables2026-03-13T14:41:13.000Zhttps://docs.langflow.org/contributing-bundles2026-03-13T14:41:13.000Zhttps://docs.langflow.org/contributing-community2026-03-13T14:41:13.000Zhttps://docs.langflow.org/contributing-component-tests2026-03-13T14:41:13.000Zhttps://docs.langflow.org/contributing-components2026-03-13T14:41:13.000Zhttps://docs.langflow.org/contributing-github-issues2026-03-13T14:41:13.000Zhttps://docs.langflow.org/contributing-how-to-contribute2026-03-13T14:41:13.000Zhttps://docs.langflow.org/contributing-telemetry2026-03-13T14:41:13.000Zhttps://docs.langflow.org/contributing-templates2026-03-13T14:41:13.000Zhttps://docs.langflow.org/current-date2026-03-13T14:41:13.000Zhttps://docs.langflow.org/data-operations2026-03-13T14:41:13.000Zhttps://docs.langflow.org/data-types2026-03-13T14:41:13.000Zhttps://docs.langflow.org/dataframe-operations2026-03-13T14:41:13.000Zhttps://docs.langflow.org/deployment-architecture2026-03-13T14:41:13.000Zhttps://docs.langflow.org/deployment-caddyfile2026-03-13T14:41:13.000Zhttps://docs.langflow.org/deployment-docker2026-03-13T14:41:13.000Zhttps://docs.langflow.org/deployment-gcp2026-03-13T14:41:13.000Zhttps://docs.langflow.org/deployment-hugging-face-spaces2026-03-13T14:41:13.000Zhttps://docs.langflow.org/deployment-kubernetes-dev2026-03-13T14:41:13.000Zhttps://docs.langflow.org/deployment-kubernetes-prod2026-03-13T14:41:13.000Zhttps://docs.langflow.org/deployment-nginx-ssl2026-03-13T14:41:13.000Zhttps://docs.langflow.org/deployment-overview2026-03-13T14:41:13.000Zhttps://docs.langflow.org/deployment-prod-best-practices2026-03-13T14:41:13.000Zhttps://docs.langflow.org/deployment-public-server2026-03-13T14:41:13.000Zhttps://docs.langflow.org/deployment-railway2026-03-13T14:41:13.000Zhttps://docs.langflow.org/deployment-render2026-03-13T14:41:13.000Zhttps://docs.langflow.org/develop-application2026-03-13T14:41:13.000Zhttps://docs.langflow.org/directory2026-03-13T14:41:13.000Zhttps://docs.langflow.org/dynamic-create-data2026-03-13T14:41:13.000Zhttps://docs.langflow.org/enterprise-database-guide2026-03-13T14:41:13.000Zhttps://docs.langflow.org/environment-variables2026-03-13T14:41:13.000Zhttps://docs.langflow.org/get-started-installation2026-03-13T14:41:13.000Zhttps://docs.langflow.org/get-started-quickstart2026-03-13T14:41:13.000Zhttps://docs.langflow.org/guardrails2026-03-13T14:41:13.000Zhttps://docs.langflow.org/if-else2026-03-13T14:41:13.000Zhttps://docs.langflow.org/install-custom-dependencies2026-03-13T14:41:13.000Zhttps://docs.langflow.org/integrations-arize2026-03-13T14:41:13.000Zhttps://docs.langflow.org/integrations-instana-traceloop2026-03-13T14:41:13.000Zhttps://docs.langflow.org/integrations-langfuse2026-03-13T14:41:13.000Zhttps://docs.langflow.org/integrations-langsmith2026-03-13T14:41:13.000Zhttps://docs.langflow.org/integrations-langwatch2026-03-13T14:41:13.000Zhttps://docs.langflow.org/integrations-openlayer2026-03-13T14:41:13.000Zhttps://docs.langflow.org/integrations-opik2026-03-13T14:41:13.000Zhttps://docs.langflow.org/jwt-authentication2026-03-13T14:41:13.000Zhttps://docs.langflow.org/knowledge2026-03-13T14:41:13.000Zhttps://docs.langflow.org/knowledge-base2026-03-13T14:41:13.000Zhttps://docs.langflow.org/legacy-core-components2026-03-13T14:41:13.000Zhttps://docs.langflow.org/llm-selector2026-03-13T14:41:13.000Zhttps://docs.langflow.org/logging2026-03-13T14:41:13.000Zhttps://docs.langflow.org/loop2026-03-13T14:41:13.000Zhttps://docs.langflow.org/luna-for-langflow2026-03-13T14:41:13.000Zhttps://docs.langflow.org/mcp-client2026-03-13T14:41:13.000Zhttps://docs.langflow.org/mcp-component-astra2026-03-13T14:41:13.000Zhttps://docs.langflow.org/mcp-server2026-03-13T14:41:13.000Zhttps://docs.langflow.org/mcp-tools2026-03-13T14:41:13.000Zhttps://docs.langflow.org/mcp-tutorial2026-03-13T14:41:13.000Zhttps://docs.langflow.org/memory2026-03-13T14:41:13.000Zhttps://docs.langflow.org/message-history2026-03-13T14:41:13.000Zhttps://docs.langflow.org/mock-data2026-03-13T14:41:13.000Zhttps://docs.langflow.org/notify-and-listen2026-03-13T14:41:13.000Zhttps://docs.langflow.org/parser2026-03-13T14:41:13.000Zhttps://docs.langflow.org/python-interpreter2026-03-13T14:41:13.000Zhttps://docs.langflow.org/read-file2026-03-13T14:41:13.000Zhttps://docs.langflow.org/release-notes2026-03-13T14:41:13.000Zhttps://docs.langflow.org/run-flow2026-03-13T14:41:13.000Zhttps://docs.langflow.org/security2026-03-13T14:41:13.000Zhttps://docs.langflow.org/session-id2026-03-13T14:41:13.000Zhttps://docs.langflow.org/smart-router2026-03-13T14:41:13.000Zhttps://docs.langflow.org/smart-transform2026-03-13T14:41:13.000Zhttps://docs.langflow.org/split-text2026-03-13T14:41:13.000Zhttps://docs.langflow.org/sql-database2026-03-13T14:41:13.000Zhttps://docs.langflow.org/structured-output2026-03-13T14:41:13.000Zhttps://docs.langflow.org/text-input-and-output2026-03-13T14:41:13.000Zhttps://docs.langflow.org/traces2026-03-13T14:41:13.000Zhttps://docs.langflow.org/troubleshoot2026-03-13T14:41:13.000Zhttps://docs.langflow.org/type-convert2026-03-13T14:41:13.000Zhttps://docs.langflow.org/typescript-client2026-03-13T14:41:13.000Zhttps://docs.langflow.org/url2026-03-13T14:41:13.000Zhttps://docs.langflow.org/web-search2026-03-13T14:41:13.000Zhttps://docs.langflow.org/webhook2026-03-13T14:41:13.000Zhttps://docs.langflow.org/workflow-api2026-03-13T14:41:13.000Zhttps://docs.langflow.org/write-file2026-03-13T14:41:13.000Zhttps://docs.langflow.org/2026-03-13T14:41:13.000Z \ No newline at end of file diff --git a/smart-router.html b/smart-router.html index 1e1a80105b..288da7200a 100644 --- a/smart-router.html +++ b/smart-router.html @@ -25,7 +25,7 @@ - + diff --git a/smart-transform.html b/smart-transform.html index 44fca9edd2..d4f8a638e1 100644 --- a/smart-transform.html +++ b/smart-transform.html @@ -25,7 +25,7 @@ - + diff --git a/split-text.html b/split-text.html index 83bca7ed7f..69dcc24307 100644 --- a/split-text.html +++ b/split-text.html @@ -25,7 +25,7 @@ - + diff --git a/sql-database.html b/sql-database.html index 7757f776de..5b06a63994 100644 --- a/sql-database.html +++ b/sql-database.html @@ -25,7 +25,7 @@ - + diff --git a/structured-output.html b/structured-output.html index f74b7eec3b..bd94c9fc89 100644 --- a/structured-output.html +++ b/structured-output.html @@ -25,7 +25,7 @@ - + diff --git a/text-input-and-output.html b/text-input-and-output.html index e585c74d24..019ca57cc5 100644 --- a/text-input-and-output.html +++ b/text-input-and-output.html @@ -25,7 +25,7 @@ - + diff --git a/traces.html b/traces.html index eaa0444529..df7e7f69f8 100644 --- a/traces.html +++ b/traces.html @@ -25,7 +25,7 @@ - + diff --git a/troubleshoot.html b/troubleshoot.html index aea9af6f50..5aec55a9a1 100644 --- a/troubleshoot.html +++ b/troubleshoot.html @@ -25,7 +25,7 @@ - + diff --git a/type-convert.html b/type-convert.html index 1ab5a21d8b..643a47804c 100644 --- a/type-convert.html +++ b/type-convert.html @@ -25,7 +25,7 @@ - + diff --git a/typescript-client.html b/typescript-client.html index ae4d28e936..5d77d2752c 100644 --- a/typescript-client.html +++ b/typescript-client.html @@ -25,7 +25,7 @@ - + diff --git a/url.html b/url.html index b016ce22fb..129bba993c 100644 --- a/url.html +++ b/url.html @@ -25,7 +25,7 @@ - + diff --git a/web-search.html b/web-search.html index c10d1a0df7..cd427866f0 100644 --- a/web-search.html +++ b/web-search.html @@ -25,7 +25,7 @@ - + diff --git a/webhook.html b/webhook.html index 1523e66019..fbdeae4dc5 100644 --- a/webhook.html +++ b/webhook.html @@ -25,7 +25,7 @@ - + diff --git a/workflow-api.html b/workflow-api.html index 4f0aa8c463..829db98e67 100644 --- a/workflow-api.html +++ b/workflow-api.html @@ -25,7 +25,7 @@ - + diff --git a/write-file.html b/write-file.html index 735c92387c..aca79e952f 100644 --- a/write-file.html +++ b/write-file.html @@ -25,7 +25,7 @@ - +