diff --git a/docs/docs/examples/flow-runner.mdx b/docs/docs/examples/flow-runner.mdx index b84b65353..daf5ba6db 100644 --- a/docs/docs/examples/flow-runner.mdx +++ b/docs/docs/examples/flow-runner.mdx @@ -6,7 +6,7 @@ hide_table_of_contents: true import ZoomableImage from "/src/theme/ZoomableImage.js"; import Admonition from "@theme/Admonition"; -## FlowRunner Example +# FlowRunner Component Now let's see how to create a component that runs other flows. @@ -21,7 +21,7 @@ What we will see in this example: ```python -from langflow.interface.custom.custom_component import CustomComponent +from langflow import CustomComponent class MyComponent(CustomComponent): display_name = "Custom Component" @@ -40,7 +40,7 @@ This is the basic structure of a custom component. --- ```python -from langflow.interface.custom.custom_component import CustomComponent +from langflow import CustomComponent # focus class FlowRunner(CustomComponent): @@ -62,16 +62,14 @@ So, let's start by adding the _`display_name`_ and a _`description`_. --- ```python -from langflow.interface.custom.custom_component import CustomComponent +from langflow import CustomComponent # focus from langchain.schema import Document class FlowRunner(CustomComponent): - display_name = "Flow Runner" - - description = "Run other flows" + description = "Run other flows using a document as input." def build_config(self): ... @@ -86,7 +84,7 @@ Now let's import _`Document`_ from the _`langchain.schema`_ module, which will b --- ```python -from langflow.interface.custom.custom_component import CustomComponent +from langflow import CustomComponent # focus from langchain.schema import Document @@ -114,14 +112,12 @@ The parameters we added are: --- ```python -from langflow.interface.custom.custom_component import CustomComponent +from langflow import CustomComponent from langchain.schema import Document class FlowRunner(CustomComponent): - display_name = "Flow Runner" - description = "Run other flows using a document as input." def build_config(self): @@ -142,14 +138,12 @@ We will start by listing the flows in the collection using the _`list_flows`_ me --- ```python -from langflow.interface.custom.custom_component import CustomComponent +from langflow import CustomComponent from langchain.schema import Document class FlowRunner(CustomComponent): - display_name = "Flow Runner" - description = "Run other flows using a document as input." def build_config(self): @@ -175,14 +169,12 @@ We can then get the flow that matches the selected name. --- ```python -from langflow.interface.custom.custom_component import CustomComponent +from langflow import CustomComponent from langchain.schema import Document class FlowRunner(CustomComponent): - display_name = "Flow Runner" - description = "Run other flows using a document as input." def build_config(self): @@ -210,14 +202,12 @@ You can find more information about it in the [features guidelines](../guideline --- ```python -from langflow.interface.custom.custom_component import CustomComponent +from langflow import CustomComponent from langchain.schema import Document class FlowRunner(CustomComponent): - display_name = "Flow Runner" - description = "Run other flows using a document as input." def build_config(self): @@ -248,17 +238,16 @@ then we'll have to process the page_content depending on what is the input of th One other approach would be to create another CustomComponent that builds a dictionary and then we use that as the input for the FlowRunner. + --- ```python -from langflow.interface.custom.custom_component import CustomComponent +from langflow import CustomComponent from langchain.schema import Document class FlowRunner(CustomComponent): - display_name = "Flow Runner" - description = "Run other flows using a document as input." def build_config(self): @@ -283,6 +272,51 @@ Finally, we can use the _`page_content`_ in the flow and return the result. --- +```python focus=9:16 +from langflow import CustomComponent +from langchain.schema import Document + + +class FlowRunner(CustomComponent): + display_name = "Flow Runner" + description = "Run other flows using a document as input." + + def build_config(self): + flows = self.list_flows() + flow_names = [f.name for f in flows] + return {"flow_name": {"options": flow_names, + "display_name": "Flow Name", + }, + "document": {"display_name": "Document"} + } + + + def build(self, flow_name: str, document: Optional[Document] = None) -> Document: + # List the flows + flows = self.list_flows() + # Get the flow that matches the selected name + flow = next(filter(lambda f: f.name == flow_name, flows)) + # Load the flow + tweaks = {} + flow = self.load_flow(flow.id, tweaks) + # Get the page_content from the document + page_content = document.page_content + # Use it in the flow + result = flow(page_content) + return Document(page_content=str(result)) +``` + +Now we can add the field customization to the _`build_config`_ method. + +We are using the _`options`_ parameter to make the _`flow_name`_ field a dropdown menu. + + + Make sure the type of the field is _`str`_ and the values of the _`options`_ + are strings. + + +--- + In Langflow, this is how our script looks like: @@ -292,7 +326,7 @@ In Langflow, this is how our script looks like: