diff --git a/src/backend/langflow/components/utilities/ListFlows.py b/src/backend/langflow/components/utilities/ListFlows.py new file mode 100644 index 000000000..724cd9a82 --- /dev/null +++ b/src/backend/langflow/components/utilities/ListFlows.py @@ -0,0 +1,19 @@ +from typing import List + +from langflow import CustomComponent +from langflow.schema import Record + + +class ListFlowsComponent(CustomComponent): + display_name = "List Flows" + description = "A component to list all available flows." + + def build_config(self): + return {} + + def build( + self, + ) -> List[Record]: + flows = self.list_flows() + self.status = flows + return flows diff --git a/src/backend/langflow/components/utilities/RunFlow.py b/src/backend/langflow/components/utilities/RunFlow.py new file mode 100644 index 000000000..16a681dec --- /dev/null +++ b/src/backend/langflow/components/utilities/RunFlow.py @@ -0,0 +1,43 @@ +from typing import List, Optional + +from langflow import CustomComponent +from langflow.field_typing import NestedDict, Text +from langflow.graph.schema import ResultData +from langflow.schema import Record + + +class RunFlowComponent(CustomComponent): + display_name = "Run Flow" + description = "A component to run a flow." + + def get_flow_names(self) -> List[str]: + flow_records = self.list_flows() + return [flow_record.data["name"] for flow_record in flow_records] + + def build_config(self): + return { + "input_value": { + "display_name": "Input Value", + "multiline": True, + }, + "flow_id": { + "display_name": "Flow ID", + "info": "The ID of the flow to run.", + "options": self.get_flow_names, + }, + "tweaks": { + "display_name": "Tweaks", + "info": "Tweaks to apply to the flow.", + }, + } + + async def build( + self, input_value: Text, flow_id: str, tweaks: NestedDict + ) -> Record: + input_dict = {"input_value": input_value} + result: List[Optional[ResultData]] = await self.run_flow( + input_value=input_dict, flow_id=flow_id, tweaks=tweaks + ) + record = Record(data=result) + self.status = record + return record